Как индекс может замедлить оператор select?

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

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

DBCC FREEPROCCACHE
DBCC DROPCLEANBUFFERS
GO

select top 20 * from  MyView

это занимает 20 секунд с индексом и 9 без.

CREATE NONCLUSTERED INDEX [IX_MyField] ON [dbo].MyTable
(
    [MyField] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, 
  IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON,
  ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]

2 ответов


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

попробуй:

UPDATE STATISTICS WITH (FULLSCAN)

на вашем столе.


вы выбираете какие-либо другие столбцы из MyTable? Если это так, вы, вероятно, делаете поиск закладок (или поиск RID), что означает, что вы собираетесь вернуться к своей таблице для дополнительных данных.

вы должны разместить все столбцы, которые вы дополнительно установите в INCLUDE пункт индекса.

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