Sql Server 2008 FullText Оптимизация - PullRequest
1 голос
/ 23 декабря 2010

Я немного играю с полнотекстовыми индексами в Sql Server 2008. Я создал индекс, каталог и полностью его заполнил. В моей таблице почти 400 000 записей. Мой полнотекстовый индекс определен для столбца varchar (Max) (на данный момент давайте назовем его Text). Я выполняю следующий запрос:

выберите * из MyTable где содержится (текст, «дом»).

Этот запрос возвращает почти 20 000 записей за 14 секунд. Я думаю, что это очень медленно. Но когда я выполняю этот запрос:

выберите количество (*) в MyTable где содержится (текст, «дом»)

Для отображения результата требуется всего 1 секунда.

Я искал, и, насколько я вижу, план выполнения одинаков для обоих запросов. Почему Sql Server берет столько, чтобы показать результат первого запроса?

Что я уже сделал:

Я купил SSD и поместил на этот диск и mdf и ldf. Но когда я выполняю первый запрос, я вижу, что журналы и база данных tmp создаются на моем жестком диске (не на SSD). Мой SSD - D: и все временные файлы создаются в C:.

Это занимает так много времени, потому что sql нужны эти файлы для заполнения таблицы результатов менеджера предприятия? Что я могу сделать, чтобы оптимизировать базу данных? Мне действительно нужно, чтобы запросы выполнялись менее чем за 2 секунды.

Ответы [ 4 ]

2 голосов
/ 23 декабря 2010

Вам действительно нужно отобразить весь этот текст, или вы хотите выполнить еще несколько запросов к результатам и сузить их дальше?Я предполагаю, что большая часть из 14 секунд используется для отображения результатов - если вам не нужно показывать их или вы хотите показывать только некоторые подмножества этих результатов, время выполнения должно уменьшиться.

1 голос
/ 23 декабря 2010

Дополнительное время вашего запроса, вероятно, связано с заполнением сетки в Management Studio.

Имейте в виду, что когда вы делаете SELECT *, вы также включаете сам столбец Text в результаты сетки.Попробуйте выбрать только столбцы, отличные от вашего текстового столбца, и вы, вероятно, увидите, что время выполнения приблизилось к значению запроса SELECT COUNT (*).Вы также можете включить DATALENGTH (текст) в ваш список выбора.

В Management Studio также есть опция, которая контролирует максимальное количество символов, загружаемых в сетку.Вы можете найти его в Сервис -> Параметры -> Результаты запроса -> Результаты в таблицу.

1 голос
/ 23 декабря 2010

Есть ли причина, по которой вам нужно вернуть 20 000 записей? Не могли бы вы добавить подкачку к запросу, чтобы вы возвращали результирующий набор кусками по 20, 100, 1000 или что-то меньше, чем 20000? Чтобы вернуть такой большой набор результатов, потребуется время, независимо от того, насколько вы оптимизируете.

0 голосов
/ 15 февраля 2014

Я согласен с Кристианом. Ваша проблема с отображением результата. Попробуйте вывести текст, а не сетку, чтобы устранить некоторые из этих издержек.

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