Индексы SQL Server не помогают - PullRequest
0 голосов
/ 12 декабря 2008

У меня есть таблица (SQL 2000) с более чем 10000000 записей. Записи добавляются в размере примерно 80 000-100 000 в неделю. Раз в неделю из данных генерируется несколько отчетов. Отчеты, как правило, работают довольно медленно, потому что индексов мало (предположительно, для ускорения INSERT). В одном новом отчете может быть полезен дополнительный индекс для определенного столбца "char (3)".

Я добавил индекс с помощью Enterprise Manager (Управление индексами -> Создать -> выбрать столбец, ОК) и даже перестроил индексы в таблице, но запрос SELECT вообще не ускорился. Есть идеи?

Обновление

Определение таблицы:

ID, int, PK
Source, char(3)  <--- column I want indexed
...
About 20 different varchar fields
...
CreatedDate, datetime
Status, tinyint
ExternalID, uniqueidentifier

Мой тестовый запрос просто:

select top 10000 [field list] where Source = 'abc'

Ответы [ 4 ]

5 голосов
/ 12 декабря 2008

Вам нужно взглянуть на план запроса и посмотреть, использует ли он этот новый индекс - если нет, есть пара вещей. Во-первых, у него может быть план кэшированных запросов, который он использует и который не был признан недействительным с момента создания нового индекса. Если это не так, вы также можете попробовать подсказки индекса [With (Index (yourindexname))].

10 000 000 строк - это не неслыханно, это следует прочитать довольно быстро.

1 голос
/ 12 декабря 2008

Используйте Показать план выполнения в SQL Query Analyzer, чтобы проверить, используется ли индекс.

Вы также можете попробовать сделать его кластерным индексом, если он еще не создан.

0 голосов
/ 12 декабря 2008
 select top 10000 

Насколько уникальны ваши источники? Индексы полей, которые имеют очень мало значений, обычно игнорируются механизмом SQL. Они делают запросы медленнее. Возможно, вы захотите удалить этот индекс и посмотреть, быстрее ли он, если ваше поле SOURCE содержит только несколько значений.

0 голосов
/ 12 декабря 2008

Для таблицы такого размера ваша лучшая ставка, вероятно, будет разделять вашу таблицу и индексы.

...