Полнотекстовый поиск SQL эффективен для быстрого поиска данных, начинающихся с заданной строки.
Насколько я знаю, CONTAINS
поддерживает только поиск по префиксу (поиск по суффиксу не поддерживается), в то время как LIKE
может достичь обоих.
Если вам нужна быстрая фильтрация запросов по определенным столбцам (даже если они находятся в разных таблицах) и вы принимаете тот факт, что поиск по суффиксам не является обязательным, я определенно остановлюсь на полнотекстовом поиске SQL.
Для фильтрации по столбцам из разных таблиц необходимо создать отдельный FULLTEXT INDEX
для каждой таблицы.
Например, если у вас есть три таблицы (T1, T2, T3) с соответствующими им столбцами ([A, B, C] в T1, [D, E, F] в T2 и [G, H, I] в T3) сначала необходимо создать каталог:
CREATE FULLTEXT CATALOG CatalogName AS DEFAULT;
После этого вы должны создать FULLTEXT INDEXES
.
CREATE FULL TEXT INDEX ON T1
(A, B, C) KEY INDEX INDEX_NAME ON CatalogName
CREATE FULL TEXT INDEX ON T2
(D, E) KEY INDEX INDEX_NAME ON CatalogName
CREATE FULL TEXT INDEX ON T3
(G) KEY INDEX INDEX_NAME ON CatalogName
После этого вы просто пишете свой SQL-запрос (с объединениями или другой логикой) и добавляете в свое WHERE
предложение следующее:
WHERE CONTAINS((A, B, C), '"keyword*"'
OR CONTAINS((D, E), '"keyword*"'
OR CONTAINS((G), '"keyword*"'
Если ваши таблицы будут страдать от фрагментации, у вас может быть задача «Рабочая роль», которая проверяет таблицы и, при необходимости, перестраивает индексы.