[Sql Server] Index with Included columns
От: HomoHabilis  
Дата: 24.10.16 10:11
Оценка:
Всем доброго времени суток.
Разбираюсь тут с индексами и возник вопрос.
Некластеризованный индекс и включенные столбцы.
Если у нас таблица куча то в некластеризованном индексе храниться ссылка на строку в куче, если таблица с кластерным индексом, то ссылка на (так понимаю) лист кластерного индекса.

В случае некластеризованного индекса, если мы включаем столбцы (included) мы храним данные этих столбцов в листьях индекса.

Возникают некоторые вопросы, на которые пока не нашел ответа.
Вот статейка.

В этой статье приведен план запроса и операция Key Lookup по кластерному индексу довольно дорога.
Как я понимаю, в случае некластерного индекса без включенных столбцов, что в запросе в части Select
по столбцам что в части Where происходит поиск по некластеному инцексу,
затем за оставшимися данными мы лезем либо в кучу либо в кластерный индекс (как статье).
Это получается что, прочитать данные по ссылке (что должна храниться) в некластерном индексе так дорого ?

Т.е. :
SELECT SalesOrderDetailid,productid,salesorderid,orderqty,unitprice FROM SalesOrderDetail WHERE productid=707 AND 
SalesOrderID=43680

— по некластеному индексу нашли то что в where (Index seek)
— по ссылке что хранится в некластерном индексе считываем остальные данные что в части Select ( и судя по плану это так дорого выходит)
Или я что то упускаю. Или там идет именно поиск по индексу по этим столбцам, но зачем если в некластерном индексе есть ссылка?

Или сформулируем вопрос по другому, включенные столбцы именно избавляют от накладных расходов по получению данных столбцов, что не включены в индекс?

Потом в случае включенных столбцов, так понимаю эти данные дублируются как в листьях некластерного индекса так и в таблице(куча или кластер) ?
Отредактировано 24.10.2016 10:15 ГАИ . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.