Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Tìm kiếm CHARINDEX và LIKE cho hiệu suất rất khác nhau, tại sao?

Tôi sẽ trả lời câu hỏi của riêng mình vì thật khó để tìm câu trả lời chính xác và tôi đã được chỉ ra vấn đề bằng đầu ra Kế hoạch thực thi SQL Server 2012. Như bạn thấy trong câu hỏi ban đầu - bề ngoài mọi thứ đều ổn. Đây là SQL Server 2008.

Khi tôi chạy cùng một truy vấn vào năm 2012, tôi nhận được cảnh báo trên CHARINDEX truy vấn. Vấn đề là - SQL Server phải thực hiện chuyển đổi kiểu. Address1VarChar và truy vấn có N'1124 'là Unicode hoặc NVarChar . Nếu tôi thay đổi truy vấn này như vậy:

SELECT * 
FROM LOCAddress 
WHERE (CAST(CHARINDEX(LOWER('1124'), LOWER([Address1])) AS int)) 

Sau đó, nó chạy giống như LIKE truy vấn. Vì vậy, chuyển đổi kiểu do trình tạo Entity Framework gây ra đã gây ra tác động khủng khiếp này về hiệu suất.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sự khác biệt giữa JOIN và INNER JOIN

  2. Sql Server 2008 NVARCHAR độ dài -1

  3. Làm cách nào để lấy tập lệnh của dữ liệu SQL Server?

  4. Bạn sẽ triển khai các trình tự trong Microsoft SQL Server như thế nào?

  5. SQL Server SELECT trong đó bất kỳ cột nào chứa 'x'