У меня есть простой запрос, основанный на двух полнотекстовых индексированных таблицах, но он работает очень медленно, когда у меня есть CONTAINS в сочетании с любым дополнительным поиском ИЛИ . Как видно из плана выполнения, два полнотекстовых поиска снижают производительность. Если я запрашиваю только 1 из КОНТЕЙНОВ или ни того, ни другого, запрос будет менее секунды, но в момент добавления ИЛИ в смесь запрос становится неудачным.
Эти две таблицы не являются чем-то особенным, они не слишком широки (42 столбца в одной, 21 в другой; возможно, 10 столбцов имеют индексирование FT в каждой) или даже содержат очень много записей (36 тысяч записей в самой большой из два).
Мне удалось решить проблему производительности, разделив два CONTAINS поиска на их собственные SELECT запросы и затем UNION на три. Является ли этот обходной путь UNION моей единственной надеждой?
SELECT a.CollectionID
FROM collections a
INNER JOIN determinations b ON a.CollectionID = b.CollectionID
WHERE a.CollrTeam_Text LIKE '%fa%'
OR CONTAINS(a.*, '"*fa*"')
OR CONTAINS(b.*, '"*fa*"')
План выполнения: