У меня есть простой запрос, который основывается на двух полнотекстовых индексированных таблицах, но он выполняется очень медленно, когда у меня есть СОДЕРЖАНИЕ, объединенное с любым дополнительным поиском ИЛИ. Как видно из плана выполнения, два полнотекстовых поиска снижают производительность. Если я запрашиваю только 1 из КОНТЕЙНОВ или ни того, ни другого, запрос будет менее секунды, но в тот момент, когда вы добавляете ИЛИ в микс, запрос становится неудачным.
Эти две таблицы не являются чем-то особенным, они не слишком широкие (42 столбца в одной, 21 столбец в другой; возможно, 10 столбцов являются индексированными FT в каждой) или даже содержат очень много записей (36 тысяч записей в самой большой из двух).
Я был в состоянии решить производительность путем разделения два СОДЕРЖИТ поиск в свои собственные запросы 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*"')
План выполнения: