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

) EXISTS JOIN с временной таблицей шуршит примерно на 60% (350мс против 600мс) быстрее
Все равно мне вариант с EXISTS JOIN не нравится - он будет сильно зависеть от условий запроса (наполнения промежуточной таблицы), т.е. менее предсказуем в дальнейшем. Если промежуточная таблица статичная (настроечная) - такой вариант имеет право на существование, если ее перед каждым запросом придется наполнять (не забываем про многопользовательскую работу) - отказать