У меня есть таблица, в которой я создал полнотекстовый каталог. В таблице всего 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 для автозаполнения, но еще не пытался что-то макетировать. Это было бы моим следующим шагом, но я хотел сначала проверить здесь, чтобы узнать, какой совет я получу.
Спасибо заранее.