On Sat, 24 Nov 2007 09:35:46 +0300, Карабас Барабас <[EMAIL PROTECTED]> wrote:
> Я вот подумал - в каждом случае добавления бесполезных условий из выборки
> выпадают NULLы. Может с этим что-то связано ?
Нет. В этих полях нулов не было. К тому же в основном это FK, кроме даты.
Там какая-то фича с использованием кластерных индексов, дополнительное
отсечение происходит почему-то.
Иногда при добавлении этих "бесполезных" условий, типа "and id>0" (id - PK)
кардинально меняет план запроса.
А некоторые фичи меня просто в тупик ставят.
Возьмём мой предыдущий пример. "Заоптимизируем". (Замечу, что по
производительности DISTINCT = GROUP BY)
select *
from (select id, date from table1 group by id, date) p
join table2 t on t.id = p.id
where p.id+0 = t.id and p.date+0 = p.date
Теперь сделаем такой финт ушами:
select *
from (select id, date, max(some_field) sf from table1 group by id, date) p
join table2 t on t.id = p.id
where p.id+0 = t.id and p.date+0 = p.date and p.sf+0 = p.sf
И что бы ты думал? Производительность улучшается! (Хотя и мало)
Меня, собственно, смущает не особенности работы с данными M$SQL, а то, почему
такие заведомые оптимизации сервер САМ НЕ ДЕЛАЕТ.
--
Сергей Смирнов.