На заметке на полях ниже кода также сделает это полужирным.
<strong> text here </strong>
Хранилище в куче не имеет ничего общего с этими кучами .
Куча просто означает, что сами записи не упорядочены (т.е. не связаны друг с другом).
Когда вы вставляете запись, она просто вставляется в свободное пространство, которое находит база данных.
Если вы создаете вторичный индекс на таблица HEAP
, RID
(своего рода физический указатель на пространство хранения) используется в качестве указателя строки.
Кластерный индекс означает, что записи являются частью B-дерево
. Когда вы вставляете запись, необходимо повторно связать B-дерево
.
Если вы создаете вторичный индекс для кластеризованной таблицы, значение ключа кластеризованного индекса используется в качестве указателя строки.
Это означает, что кластеризованный индекс должен быть уникальным. Если кластеризованный индекс не уникален, специальный скрытый столбец, называемый uniquifier
, добавляется к ключу индекса, который делает его уникальным (и имеет больший размер).
Также стоит отметить, что создание вторичного индекса в столбце делает значения или ключ кластеризованного индекса частью ключа второго индекса.
CREATE UNIQUE CLUSTERED INDEX CX_mytable_1234 (col1, col2, col3, col4)
CREATE INDEX IX_mytable_5678 (col5, col6, col7, col8)
Индекс IX_mytable_5678
фактически является индексом для следующих столбцов:
col5
col6
col7
col8
col1
col2
col3
col4
Это имеет еще один побочный эффект:
DESC
в индексе с одним столбцом в кластеризованной таблице имеет смысл в SQL Server
Этот индекс:
CREATE INDEX IX_mytable ON mytable (col1)
может использоваться в запросе, подобном этому:
SELECT TOP 100 *
FROM mytable
ORDER BY
col1, id
, а вот этот:
CREATE INDEX IX_mytable ON mytable (col1 DESC)
можно использовать в таком запросе:
SELECT TOP 100 *
FROM mytable
ORDER BY
col1, id DESC
Следующий раздел книги, Один уровень абстракции на функцию , в значительной степени помогает ответить на этот вопрос. Все эти операторы находятся на одном уровне абстракции, поэтому эта функция уже выполняет одно действие, сохраняя настройки.
Ядро СУБД - Планирование и архитектура - Таблицы и архитектура структур индексных данных - очень хорошее внутреннее введение.
По этой ссылке вы можете загрузить локальную копию электронной книги (это бесплатно). Это лучшая (и официальная) ссылка на все вопросы по Sql 2008.
Кучи - это просто таблицы без ключа кластеризации - без ключа, обеспечивающего определенный физический порядок.
Я бы не рекомендовал создавать кучи в любое время - кроме, может быть, если вы используете таблицу временно для массовой загрузки внешнего файла и последующего распределения этих строк в другие таблицы.
В любом другом случае я настоятельно рекомендую использовать ключ кластеризации. SQL Server по умолчанию будет использовать первичный ключ в качестве ключа кластеризации, что в большинстве случаев является хорошим выбором. ЕСЛИ вы не используете GUID (UNIQUEIDENTIFIER) в качестве первичного ключа, и в этом случае использование его в качестве ключа кластеризации - ужасная идея.
См. Kimberly Tripp '