Ускорение полнотекстового индекса SQL Server за счет дублирования текста неиндексированных столбцов - PullRequest
1 голос
/ 27 мая 2010

1) У меня есть текстовые поля FirstName, LastName и City. Они полнотекстовые индексированные.

2) У меня также есть поля FK int AuthorId и EditorId, а не полнотекстовый индекс.

Поиск по FirstName = 'abc' И AuthorId = 1 сначала выполнит поиск по полному текстовому индексу весь для 'abc', а затем сузит набор результатов для AuthorId = 1.

Это плохо, потому что это огромная трата ресурсов, так как полнотекстовый поиск будет выполняться по многим записям, которые неприменимы.

К сожалению, насколько мне известно, это не может быть изменено (сначала сузьте по AuthorId, а затем выполните полнотекстовый поиск в соответствующем подмножестве), поскольку процесс FTS отделен от SQL Server.

Теперь мое предлагаемое решение, к которому я обращаюсь за обратной связью: имеет ли смысл создавать еще один вычисляемый столбец, который будет включен в полнотекстовый поиск, который будет идентифицировать автора как текст (например, AUTHORONE). Таким образом, я мог бы избавиться от ограничения AuthorId и вместо этого сделать его частью моего полнотекстового поиска (для поиска «abc» были бы «abc» и «AUTHORONE» - все выполнялись как часть полнотекстового поиска).

Это хорошая идея или нет? Почему?

1 Ответ

0 голосов
/ 31 августа 2011

В SQL 2000 и SQL 2005 абсолютно неплохо встраивать поисковые ключи в столбец, на котором построен полнотекстовый индекс. Это связано с тем, что SQL 2000 и SQL 2005 неэффективно обрабатывают то, что Microsoft называет смешанными сценариями запросов .

В SQL 2008 полный текст полностью интегрирован в базу данных, и вам обычно не нужно встраивать другие ключи поиска в данные.

Примечание. В приведенном выше примере вам не нужно преобразовывать «1» в слово «ОДИН». SQL FT найдет «Author1» просто отлично.

...