У меня есть таблица, в которой я создал полнотекстовый каталог. В таблице всего 6000 строк. Я добавил два индекса в индекс. Первым можно считать уникальный идентификатор сортировок, а второй можно считать содержимым для этого элемента (в моей таблице еще 11 столбцов, которые не являются частью полнотекстового каталога). Ниже приведен пример нескольких строк:
TABLE: data_variables
ROW unique_id label
1 A100d1 Personal preference of online shopping sites
2 A100d2 Shopping behaviors for adults in household
В моем веб-приложении на переднем конце у меня есть текстовое поле, которое пользователь может ввести, чтобы получить список элементов, которые соответствуют тем терминам, которые они ищут в столбцах UNIQUE ID или LABEL. Так, например, если пользователь набрал sho или a100, тогда список будет заполнен обеими строками выше. Если они набрали behav, тогда список будет заполнен только следующей строкой 2.
Это выполняется с помощью запроса Ajax на каждом keyup. PHP вызывает хранимую процедуру на SQL-сервере, которая выглядит следующим образом:
SELECT TOP 50 dv.id, dv.id + ': ' + dv.label,
dv.type_id, dv.grouping, dv.friendly_label
FROM data_variables dv
WHERE (CONTAINS((dv.unique_id, dv.label), @search))
(@search - это текст пользователя, который передается в хранимую процедуру.)
Я заметил, что это становится довольно медлительным, особенно когда я не использовал TOP 50 в запросе.
Я ищу способ ускорить это либо непосредственно на SQL Server, либо отказаться от идеи полнотекстового индексирования и использовать jQuery для поиска по массиву элементов, доступных для поиска на стороне клиента. Я немного посмотрел в материал jQuery AutoComplete и некоторые другие плагины jQuery для автозаполнения, но еще не пытался что-то макетировать. Это было бы моим следующим шагом, но я хотел сначала проверить здесь, чтобы узнать, какой совет я получу.
Спасибо заранее.