сканирование таблицы и сканирование кластеризованного индекса

У меня есть таблица, из которой в большинстве случаев нужно получить все строки. Сейчас в нем 10334 записи, и ожидается, что он не превысит 15К. Таблица часто обновляется.

Я могу создать кластеризованный индекс, если это необходимо.

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


person Jithin Shaji    schedule 20.03.2014    source источник
comment
В конце концов, от вас не зависит, будет ли он использовать сканирование таблицы или сканирование индекса — это зависит от планировщика запросов, и он обычно выбирает правильный вариант. Для таблицы из 15 000 строк это, вероятно, не имеет значения в любом случае.   -  person Nick.McDermaid    schedule 20.03.2014
comment
Прочитайте превосходную статью Кимберли Трипп Дебаты о кластеризованном индексе продолжаются... сообщение в блоге — она объясняет, почему хороший ключ кластеризации может ускорить все операции по сравнению с кучей — так что да, я всегда рекомендую выбирать хороший кластеризатор ключ (узкий, уникальный, статичный, постоянно увеличивающийся) а не просто пусть ваши данные гниют кучами...   -  person marc_s    schedule 20.03.2014
comment
Величие кластеризованного индекса — это факт. Я просто смотрел, будут ли в этой конкретной ситуации оба действовать одинаково?   -  person Jithin Shaji    schedule 20.03.2014
comment
Хорошее эмпирическое правило, которое используют большинство опытных администраторов баз данных, которых я знаю, заключается в том, что HEAP всегда хорош только для одной вещи: для использования в таблицах дампа, где вам нужно как можно быстрее вставить большой объем данных. Например, если у вас есть только небольшое окно в день для вывода данных отчетов из другой системы, вы можете подумать о том, чтобы сбросить их в HEAP, чтобы уменьшить накладные расходы, необходимые SQL Server для создания и сортировки данных в кластеризованном индексе. Однако, если это не проблема, вы всегда должны использовать кластеризованный индекс для таблицы.   -  person Kahn    schedule 20.03.2014


Ответы (1)


Предлагается использовать полное сканирование таблицы, а не поиск/сканирование любого вида индекса (кластерного/некластерного индекса) в следующем контексте:

  1. При доступе ко всем записям вашей таблицы. На основании вашего комментария - «все записи должны извлекаться каждый раз», поэтому неэффективно получать доступ к данным через любой индекс.
  2. Строки таблицы содержат 10-20 тыс. строк и часто обновляются. Основываясь на вашем комментарии: «... сейчас в нем 10334 записи, и ожидается, что их число не превысит 15 КБ. Таблица часто обновляется».

Кроме того, индекс кластера не поддерживает структуру данных (таблицу) отдельно, а сортирует и сохраняет строки данных в самой таблице.

Ответ на ваши вопросы:

Q# Но будет ли хорошей идеей хранить таблицу в виде кучи?

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

Q# Поскольку все записи необходимо извлекать каждый раз, будет ли сканирование таблицы и сканирование кластеризованного индекса обеспечивать одинаковую производительность?

Ответ # Получите Clustered-index, если вы извлекаете записи в отсортированном порядке в любой момент времени.

person Suresh Gautam    schedule 18.05.2014