Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Server heap v.s. клъстерен индекс

Съхранението на купчина няма нищо общо с тези купчини .

Купчина просто означава, че самите записи не са подредени (т.е. не са свързани един с друг).

Когато вмъкнете запис, той просто се вмъква в свободното пространство, което базата данни намира.

Актуализиране на ред в таблица, базирана на купчина, не засяга други записи (въпреки че засяга вторичните индекси)

Ако създадете вторичен индекс на HEAP таблица, RID (вид физически указател към пространството за съхранение) се използва като указател на ред.

Клъстърният индекс означава, че записите са част от B-Tree . Когато вмъкнете запис, B-Tree трябва да се свърже отново.

Актуализиране на ред в клъстерна таблица причинява повторно свързване на 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

Това има още един страничен ефект:

A 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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Получаване на идентификатора на ред, който актуализирах в Sql Server

  2. Динамично вмъкване в израз на таблица с променливи SQL Server

  3. актуализирайте и вмъкнете заявки, създавайки задънена улица

  4. Таблица в Excel от съхранена процедура на SQL Server с поле за параметри в работна книга

  5. SQL Server:Течове на ниво на изолация в обединените връзки