Я звоню какой-нибудь параметризованный sql из .net.Я не уверен, почему, но SQL работает довольно медленно при проверке, если параметр имеет значение NULL, по сравнению с тем, когда он не включен:
Так вот:
exec sp_executesql N'
SELECT [id]
FROM [tblAddress] (nolock)
WHERE 1 = 1
AND ([id] = @id OR @id IS NULL)
',N'@id int',
@id=4395
Работает быстрее, чем это:
exec sp_executesql N'
SELECT [id]
FROM [tblAddress] (nolock)
WHERE 1 = 1
AND ([id] = @id)
',N'@id int',
@id=4395
При запуске SQL-профилировщика длительность верхнего запроса на 1 миллион строк составляет 175, а его чтения - 3720, а продолжительность второго запроса - 1 и только 3 чтения.
Почему такая разницаи как это можно улучшить?