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. Address1
là VarChar
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.