Я решил изменить поиск, используя LIKE '%' + @searchTerm + ' % '
для использования индекса FULLTEXT. Я использую SQL Server 2005.
Я создал каталог, например:
CREATE FULLTEXT CATALOG CatalogName AS DEFAULT
Я создал индекс, например:
CREATE FULLTEXT INDEX ON Table (col1, col2) KEY INDEX TablePK WITH CHANGE_TRACKING AUTO
И затем я использую его так:
SELECT col1, col2
FROM Table t
INNER JOIN FREETEXTTABLE(Table, *, @SearchTerm) s ON s.[Key] = t.Id
ORDER BY s.[Rank] DESC
Он возвращает правильные результаты, но для запуска поиска требуется около 30 секунд, если он не запускался какое-то время. После однократного запуска все дальнейшие поиски выполняются мгновенно. Если я оставлю его в покое и вернусь через час, первый поиск снова будет медленным. Кажется, это происходит, даже если таблица тем временем не обновляется.
Я пробовал это на двух совершенно разных базах данных, на совершенно разных серверах, и поведение было одинаковым. В одной из этих баз данных индексируемая таблица очень мала (50 строк), а в другой - немного больше (1000 строк).
Может ли кто-нибудь помочь мне разобраться, в чем проблема и как ее решить? ? Моя единственная альтернатива - либо полностью отказаться от FULLTEXT, либо создать службу для выполнения поискового запроса каждые n минут!