Оптимизация разницы множеств
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Оптимизация разницы множеств Expand / Collapse
Автор
Сообщение
16.08.2006 18:34
Junior Member

Junior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior Member

участник
Last Login: 26.02.2007 14:03
Сообщ.: 14, Visits: 16
Запрос просит что-то вроде
Select contactid from contact where (contactid in ('id1', 'id2')) and (contactid not in ('id2', 'id3'))
при чём множества в скобках имеют по 13000 элементов шириной в 12 символов.
Такой запрос сервер пытался обработать 45 минут, но потом мне надоело ждать. Аналогичный запрос с таким же количеством элементов, но только на пересечение или на дополнение множеств срабатывает за 2-3 минуты.
Как оптимизировать этот запрос? Или в чём тут проблема? Contactid - это non-clustered primary key index field.
Теоретически можно было бы вообще не отправлять запрос потому что все ключи есть, но вроде в T-SQL нельзя делать запросы с голыми множествами без таблицы (или можно?), но клиентская машина наверно будет работать очень долго, это ж максимум 13000^2 сравнений данных типа char(12).
Какие ещё есть способы?
Сообщ. #902830
16.08.2006 18:55


Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

модератор
Last Login: 29.10.2007 14:45
Сообщ.: 1 833, Visits: 16 863
Предлагаю сначала запихнуть данные в таблицы. А затем использовать запрос следующего вида:

SELECT ID
FROM Contact
WHERE ID IN

(SELECT ID FROM TblYes WHERE ID NOT IN (SELECT ID FROM tblNo))

Или использовать JOIN.

Но в IN неоптимально в данном случае это пихать.

Сообщ. #902834
16.08.2006 19:00


Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

модератор
Last Login: 29.10.2007 14:45
Сообщ.: 1 833, Visits: 16 863
Кстати, если сервер 2005, то используй EXCEPT & INTERCEPT.
Сообщ. #902836
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl, Alexey Spirin

Время GMT +3:00, Сейчас 7:59