http://msdn.microsoft.com/en-us/library/ms188055.aspx
олкнулись со странной ситуацией в SQL Server 2008 (SP1) - 10.0.2531.0 (X64) - Win2008 SP2 (X64).
Вот один тяжелый запрос:
select t1.id, t2.id
from t1, t2
where
t1.id = t2.ext_id
and isnull(t1.vchCol1, 'Null') = isnull(t2.vchCol1, 'Null')
and isnull(t1.vchCol2, 'Null') = isnull(t2.vchCol2, 'Null')
.... and about 10 more comparisons with Isnull
UPD: Все столбцы в сравнении (кроме идентификаторов)varchar
(~ 30 ... 200)
T1 ~ 130 млн. Строк, T2 ~ 300 тыс. Строк.
Эти запросы на довольно большом сервере Dev работают~ 5 часов - это медленно, но что мы можем сделать?
И пока мы исследовали возможные пути оптимизации - мы обнаружили, что изменение"нулевой" в«Слипаются» в запросе выше дает двойной прирост производительности - и запрос теперь выполняется для~ 2 часа
UPD: Когда мы удаляем всеISNULL
проверяет и использует толькоt1.vchCol1 = t2.vchCol1
запрос заканчивается после40mins.
Вопрос: Это известное поведение, и мы должныизбежать с помощьюНулевой везде?