2011-06-23 6 views
0

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

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

+1

Я предлагаю вам сначала исправить нулевую оценку ... –

+0

Я думаю, что важно понимать, что добавление полнотекстового поиска в любую реляционную базу данных - это * взломать *, чтобы заставить технологию, разработанную для очень хорошо понятой проблемной области (манипулируя взаимосвязанными данные), чтобы конкурировать (плохо) с другими технологиями, созданными для совершенно несвязанной (sic) цели. Нижняя строка: если вы хотите искать неструктурированные полнотекстовые данные, используйте полнотекстовую поисковую систему. –

ответ

0

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

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

0

Позвольте мне получить это прямо ...

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

У меня есть это право?

Если все это звучит как нормальное поведение для меня.

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

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

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

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

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

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

Смежные вопросы