Полнотекстовый поиск по производительности SQL Server - PullRequest
0 голосов
/ 23 июня 2011

Мы используем Sql server 2008 r2. У нас есть таблица с 4 записями. Мы используем полнотекстовый индекс (заголовок столбца, имя, описание) в таблице. У нас есть процедура поиска по этой таблице, с помощью которой мы выбираем 10 записей из таблицы на основе ключевого слова. Когда мы выполняем поиск непосредственно в базе данных с помощью SQL Server Management Studio, тогда процедура занимает от 0 до 3 секунд на основе ключевых слов и записей в таблице, принадлежащих этому ключевому слову в первый раз. Но второй поиск вызывает поиск быстрее, чем 3 секунды. Пример: если в качестве ключевого слова у нас есть «xxx», то предположим, что в таблице у нас 1000 записей, тогда на отображение записей уходит всего 0 секунд. Но если мы ищем по ключевому слову "yyy", то в таблице, если у нас 22000 записей, соответствующих этому, тогда это займет 2 секунды. Я понятия не имею, что здесь может пойти не так. Даже когда я передаю несколько ключевых слов для поиска, время поиска результатов увеличивается. Нужно ли что-то проверять в настройках SQL Server? Пожалуйста, помогите.

Любые предложения будут оценены.

Ответы [ 3 ]

0 голосов
/ 23 июня 2011

Дай мне прямо ...

  1. Выполнение запроса в первый раз медленнее, чем во второй раз,
  2. Когда ваш запрос возвращает больше записей, это занимает больше времени и
  3. Когда вы ищете больше ключевых слов (увеличивая сложность фильтра), это занимает больше времени

Я правильно понял?

Если так, то все они звучат для меня как обычное поведение.

  1. MSSQL выполняет какое-то кэширование, поэтому последующие прогоны того же запроса будут выполняться быстрее
  2. Чем больше записей возвращено, тем больше времени требуется для перемещения данных с сервера SQL на ваш компьютер
  3. Чем сложнее запрос / условия, тем дольше будет выполняться
0 голосов
/ 24 июня 2011

В СУБД полнотекстовый поиск может быть выполнен одним из двух способов.

  1. без предварительной индексации, каждая строка должна быть отсканирована на соответствие ключевому слову или
  2. , если таблица была специально проиндексирована для полнотекстового поиска (с использованием инвертированного индекса ), индекс используется для идентификации всех строк, соответствующих ключевому слову.

Если в вашем запросе несколько слов, в первом методе каждую строку необходимо искать столько раз, сколько имеется ключевых слов, иво втором - поиск по индексу для каждого ключевого слова.

Если для запроса требуются логические операции (должны включать, не включать и т. д.), строки результатов должны создаваться путем объединения нескольких наборов результатов.

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

0 голосов
/ 23 июня 2011

Это нормально. Чем больше результатов вы получите, тем дольше вы получите результат. Попробуйте разбить результаты на страницы. Если вы получите первые 100 результатов 1..100, это будет намного быстрее. Позже вы можете использовать тот же запрос, но 101..200 и т. Д.

Другая проблема может быть ОЗУ. Чем больше у вас результатов, тем больше места нужно для сохранения, прежде чем они будут возвращены.

...