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, а то, почему 
такие заведомые оптимизации сервер САМ НЕ ДЕЛАЕТ.

-- 
Сергей Смирнов.

Ответить