Показать сообщение отдельно
Старый 11.01.2008, 19:38   #1  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1850 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от CDR Посмотреть сообщение
Вопрос не в том, какие варианты возможны?... как это лучше реализовать?... и т.п.
Вопрос в том, что быстрее exists join или like.
Кто сильнее - кит или слон?

Такая постановка вопроса не имеет смысла, так как единственный ответ на него - 'it depends'

Твой тест не на 100% корректен
Во-первых - не зря выше про выравнивание спросили. В зависимости от настроек выравнивания EDT выравнивания для LIKE могут различаться. Более адекватным для сравнения exists join с промежуточной таблицей был бы запрос (Trans.Id == 1 || Trans.Id == 2 || .. )
Во-вторых, начали c
X++:
SELECT LEDGERTRANS EXISTS JOIN
закончили
X++:
SELECT COUNT(RECID)
, у которого при наличии покрывающего индекса план выполнения будет значительно отличаться от исходного
и т.д.

У меня на LEDGERTRANS около 5 млн записей (правда, LEDGERTRANS индексирован нестандартно ) EXISTS JOIN с временной таблицей шуршит примерно на 60% (350мс против 600мс) быстрее

Все равно мне вариант с EXISTS JOIN не нравится - он будет сильно зависеть от условий запроса (наполнения промежуточной таблицы), т.е. менее предсказуем в дальнейшем. Если промежуточная таблица статичная (настроечная) - такой вариант имеет право на существование, если ее перед каждым запросом придется наполнять (не забываем про многопользовательскую работу) - отказать
__________________
-ТСЯ или -ТЬСЯ ?