sql >> Databasteknik >  >> RDS >> Sqlserver

Hur kan ett icke-klustrade index mata ut en kolumn som inte ingår i indexet

Om själva tabellen är klustrad , då innehåller alla sekundära index en kopia av klustringsnyckeln (en nyckel som bestämmer den fysiska ordningen för rader i den klustrade tabellen).

Anledningen:rader i en klustrad tabell lagras fysiskt i ett B-träd (inte tabellhög) och kan därför flytta när B-trädnoder delas eller sammansmälts, så det sekundära indexet kan inte bara innehålla raden "pekare" (eftersom den skulle riskera att "dingla" efter att raden flyttats).

Ofta har det en skadlig effekt på prestanda - förfrågan genom sekundärt index kan kräva dubbelsökning :

  • Sök först i det sekundära indexet och hämta klustringsnyckeln.
  • För det andra, baserat på klustringsnyckeln som hämtats ovan, sök i själva klustrade tabellen (som är B-trädet).

Men om allt du vill ha är fälten för klustringsnyckeln, behövs bara den första uppslagningen.

Aka "klustrade index" under MS SQL Server.

Vanligtvis, men inte nödvändigtvis en PRIMÄRNYCKEL under MS SQL Server.

Det är olyckligt att klustring är aktiverat som standard under MS SQL Server - människor lämnar ofta bara standarden utan att fullt ut överväga dess effekter. När klustring inte är lämpligt bör du ange NONCLUSTERED-nyckelordet uttryckligen för att stänga av det.



  1. Hur man lägger till dagar till ett datum i T-SQL

  2. Dinglar transaktioner i MySQL Innodb

  3. Ändra kolumntyp utan att förlora data

  4. PDO::FETCH_ASSOC hämtar inte allt