sql >> Database >  >> RDS >> Sqlserver

SQL Server-indexen - oplopend of aflopend, wat maakt het uit?

Dit is vooral van belang bij gebruik met samengestelde indexen:

CREATE INDEX ix_index ON mytable (col1, col2 DESC);

kan worden gebruikt voor:

SELECT  *
FROM    mytable
ORDER BY
        col1, col2 DESC

of:

SELECT  *
FROM    mytable
ORDER BY
        col1 DESC, col2

, maar niet voor:

SELECT  *
FROM    mytable
ORDER BY
        col1, col2

Een index op een enkele kolom kan efficiënt worden gebruikt om op beide manieren te sorteren.

Zie het artikel in mijn blog voor details:

  • Aflopende indexen

Bijwerken:

Dit kan zelfs van belang zijn voor een index met één kolom, hoewel het niet zo duidelijk is.

Stel je een index voor op een kolom van een geclusterde tabel:

CREATE TABLE mytable (
       pk INT NOT NULL PRIMARY KEY,
       col1 INT NOT NULL
)
CREATE INDEX ix_mytable_col1 ON mytable (col1)

De index op col1 bewaart geordende waarden van col1 samen met de verwijzingen naar rijen.

Omdat de tabel geclusterd is, zijn de verwijzingen naar rijen eigenlijk de waarden van de pk . Ze zijn ook gerangschikt binnen elke waarde van col1 .

Dit betekent dat de bladen van de index daadwerkelijk zijn geordend op (col1, pk) , en deze vraag:

SELECT  col1, pk
FROM    mytable
ORDER BY
        col1, pk

hoeft niet gesorteerd te worden.

Als we de index als volgt maken:

CREATE INDEX ix_mytable_col1_desc ON mytable (col1 DESC)

, dan de waarden van col1 worden aflopend gesorteerd, maar de waarden van pk binnen elke waarde van col1 wordt oplopend gesorteerd.

Dit betekent dat de volgende vraag:

SELECT  col1, pk
FROM    mytable
ORDER BY
        col1, pk DESC

kan worden bediend door ix_mytable_col1_desc maar niet door ix_mytable_col1 .

Met andere woorden, de kolommen die een CLUSTERED INDEX . vormen op een tabel staan ​​altijd de volgkolommen van een andere index in die tabel.



  1. Oracle:dagen tussen twee datums en weekdagen uitsluiten hoe om te gaan met negatieve getallen

  2. TIME_FORMAT() Voorbeelden – MySQL

  3. syntaxis voor enkele rij MERGE / upsert in SQL Server

  4. Hoge beschikbaarheid beheren in PostgreSQL – Deel III:Patroni