Как индекс может замедлить оператор выбора? - PullRequest
6 голосов
/ 09 сентября 2011

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

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

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 ]

9 голосов
/ 09 сентября 2011

Возможно, ваши ДРУГИЕ индексы или статистика устарели.Если они не являются текущими, возможно, анализатор запросов выбирает неоптимальный план выполнения, используя ваш новый индекс, так как считает, что он будет быстрее.

Попробуйте выполнить:

UPDATE STATISTICS WITH (FULLSCAN)

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

2 голосов
/ 09 сентября 2011

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

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

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

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