2010-10-19 1 views
3

IMO, пожалуйста, исправьте меня ...
лист кластеризованного индекса содержит реальную строку таблицы, поэтому полный кластеризованный индекс с промежуточными листьями содержит гораздо больше данных, чем полная таблица (?)
Почему/когда/как всегда ли целая кластеризованная индексация, выбранная во время полного сканирования таблицы?Почему/когда/как выбрано сканирование всего кластерного индекса, а не полное сканирование таблицы?

Как кластерный индекс на столбце CUSTOMER_ID, используемый в запросе SELECT, который не содержит его ни в списке SELECT, ни в условии WHERE [1]?

Update:
Должен ли я понимаю, что полное кластерное сканирование быстрее, чем полное сканирование таблицы, поскольку «Каждая страница данных содержит указатели на следующую и предыдущую страницу листа узла, поэтому сканированию не нужно использовать более высокие страницы уровня в индексе "?
Существуют ли какие-либо другие причины, такие как (неучастие в запросе) кластерный индекс используется при сортировке?

Update2:
Как второстепенным, последовательный доступ не может дать прирост производительности при загрузке таблицы с помощью IAM указателей можно распараллелить.
Сгруппированное сканирование индекса подразумевает последовательное чтение страницы?
Имеет ли кластеризованная таблица отсутствие указателей IAM (невозможность полного сканирования таблицы)?
Почему таблица с кластеризованным столом не сканируется полностью?
Я до сих пор не понимаю, как/почему кластеризованное полное сканирование индекса может быть «лучше» при полном сканировании таблицы.
Означает ли это, что наличие кластеризованного индекса может привести к ухудшению производительности?

Вопрос о кластеризованной таблице, а не куче (неиндексированной) таблице.

Update3:
ли «полный кластерный индекс сканирования» на самом деле синоним для «полного сканирования таблицы»?
В чем разница?

[1] Индекс Перекрытия форсирует SQL Server Query Performance
http://www.devx.com/dbzone/Article/29530

+0

Сканирование с кластерным индексом не обязательно выполняется быстрее, чем сканирование таблицы, но сканирование таблицы происходит только в куче (т. Е. Таблице без кластерного индекса). «Сканирование кучи» было бы более точным именем для сканирования таблицы, потому что таблица является логической конструкцией, а кучи и индексы - это физические структуры, которые используются в планах выполнения. – sqlvogel

ответ

0

Пожалуйста, прочтите мой ответ под заголовком «Нет прямого доступа к строке данных в кластерной таблице - почему?», первый.

«лист из кластерного индекса содержит реальную строку таблицы, так что полный кластерный индекс, с промежуточным листьев, содержат гораздо больше данных, чем полный стол (?)»

См вы путаете «Таблица «с структурами хранения. В контексте вашего вопроса, например. думая о размере CI в отличие от «таблицы», хорошо, тогда вы должны подумать о CI минус уровень листа (который является строкой данных). CI, только часть индекса, является крошечной. Промежуточные уровни (например, любое B-дерево) содержат частичные (не полные) ключевые записи; он исключает самый низкий уровень, который является полной ключевой записью, которая находится в самой строке и не дублируется.

Таблица (полный CI) может составлять 10 ГБ. CI может быть только 10 МБ. Существует очень много, что можно определить из 10 МБ без необходимости идти в 100 ГБ.

Для понимания: эквивалентный NCI на той же таблице (CI) может быть 22 МБ; эквивалентный NCI в той же таблице, если вы удалили CI, может быть 21,5 МБ (при условии, что ключ CI является разумным, а не толстым).

«Почему/когда/как всегда сканируется весь кластерный индексный сканер, выбранный по всему столу сканирования?»

Довольно часто. Опять контекст, мы говорим о уровнях CI-minus-Leaf. Для запросов, которые используют только столбцы в CI, наличие этих столбцов в CI (фактически любой индекс) позволяет запросу быть «закрытым запросом», что означает, что он может, полностью обслуживая индекс, не нужно идти к строкам данных. Подумайте диапазоны сканирования на частичные ключи: МЕЖДУ x И yY; x < = y; и т.д.

(Существует всегда есть шанс, что Оптимизатор выберет сканирование таблицы, когда вы думаете, он должен выбрать индекс сканирование, б т, что это совсем другая история.)

«Я до сих пор не понимаю, как/почему кластеризованное полное сканирование индекса может быть «лучше» при полном сканировании таблицы ».

(Термины, используемые MS, менее точны, чем мои ответы здесь.) Для любого запроса, на который можно ответить из 10MB CI, я бы скорее отбросил 10 МБ через кеш данных, чем 100 ГБ. Для тех же запросов, ограниченных диапазоном ключа CI, это доля 10 МБ.

Для запросов, требующих «полного сканирования таблицы», ну да, вы должны прочитать все страницы листа CI, который составляет 100 ГБ.

2

Кластерный индекс - точнее: его листьев страницы ARE данные таблицы - так кластерный индекс сканирования на самом деле то же самое как сканирование таблицы (для таблицы с кластеризованным индексом).

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

2

Уровень листа кластерного индекса - это таблица. «Сканирование таблицы» относится к куче без кластеризованного индекса.

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

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

  • Нет связанных вопросов^_^