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

Как може неклъстерен индекс да изведе колона, която не е включена в индекса

Ако самата таблица е клъстерирана , тогава всички вторични индекси съдържат копие на ключа за клъстериране (ключ, който определя физическия ред на редовете в клъстерната таблица).

Причината:редовете в клъстерирана таблица са физически съхранени в B-дърво (не купчина таблица) и следователно могат да се преместват когато възлите на B-дървото се разделят или обединят, така че вторичният индекс не може да съдържа просто „указателя“ на реда (тъй като би бил в опасност от „увисване“ след преместването на реда).

Често това има пагубен ефект върху производителността - заявките чрез вторичен индекс може да изискват двойно търсене :

  • Първо потърсете вторичния индекс и вземете ключа за клъстериране.
  • Второ, въз основа на ключа за клъстериране, извлечен по-горе, потърсете в самата клъстерирана таблица (която е B-дърво).

Ако обаче всичко, което искате, са полетата на ключа за клъстериране, е необходимо само първото търсене.

Известен още като "клъстерен индекс" под MS SQL Server.

Обикновено, но не непременно ПЪРВИЧЕН КЛЮЧ под MS SQL Server.

Жалко е, че клъстерирането е включено по подразбиране под MS SQL Server - хората често просто оставят настройката по подразбиране, без да обмислят напълно нейните ефекти. Когато клъстерирането не е подходящо, трябва изрично да посочите ключова дума NONCLUSTERED, за да го изключите.



  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 сървър

  2. Как да получите xml-безопасна версия на XML колона на sql сървър

  3. Подреждане, като не работи при вмъкване във временна таблица

  4. Как да създадете схема на таблица на SQL Server от XML схема? (с .NET и Visual Studio 2008)

  5. Знаци, които трябва да бъдат екранирани в T-SQL