2008-12-11 3 views
0

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

Я добавил индекс с помощью Enterprise Manager (Manage Indexes -> New -> select column, OK) и даже перестроил индексы в таблице, но запрос SELECT вообще не ускорился. Есть идеи?

Update:

определение Таблица:

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' 
+0

Для ответа на этот вопрос требуется определение таблицы и строка запроса. Ошибка может быть полностью в другом месте. – Tomalak 2008-12-11 21:10:19

+0

Также опубликуйте результаты EXPLAIN – 2008-12-11 21:13:05

+0

Сколько различных значений находится в Source, по сравнению с количеством строк таблицы? Является ли индекс CLUSTERED или нет? – Tomalak 2008-12-11 21:22:02

ответ

5

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

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

0

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

1

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

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

0
select top 10000 

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

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