sql >> Database teknologi >  >> RDS >> Sqlserver

SQL Server-indekser - stigende eller faldende, hvilken forskel gør det?

Dette har primært betydning, når det bruges med sammensatte indekser:

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

kan bruges til enten:

SELECT  *
FROM    mytable
ORDER BY
        col1, col2 DESC

eller:

SELECT  *
FROM    mytable
ORDER BY
        col1 DESC, col2

, men ikke til:

SELECT  *
FROM    mytable
ORDER BY
        col1, col2

Et indeks på en enkelt kolonne kan effektivt bruges til sortering på begge måder.

Se artiklen i min blog for detaljer:

  • Faldende indekser

Opdatering:

Faktisk kan dette have betydning selv for et enkelt kolonneindeks, selvom det ikke er så indlysende.

Forestil dig et indeks på en kolonne i en klynget tabel:

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

Indekset på col1 beholder ordnede værdier for col1 sammen med referencerne til rækker.

Da tabellen er klynget, er referencerne til rækker faktisk værdierne af pk . De er også ordnet inden for hver værdi af col1 .

Det betyder, at blade af indekset faktisk er bestilt på (col1, pk) , og denne forespørgsel:

SELECT  col1, pk
FROM    mytable
ORDER BY
        col1, pk

behøver ingen sortering.

Hvis vi opretter indekset som følger:

CREATE INDEX ix_mytable_col1_desc ON mytable (col1 DESC)

, derefter værdierne af col1 vil blive sorteret faldende, men værdierne for pk inden for hver værdi af col1 vil blive sorteret stigende.

Det betyder, at følgende forespørgsel:

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

kan betjenes af ix_mytable_col1_desc men ikke af ix_mytable_col1 .

Med andre ord, de kolonner, der udgør et CLUSTERED INDEX på enhver tabel er altid de efterfølgende kolonner i ethvert andet indeks på den tabel.



  1. WordPress – Bag kulisserne, del 2

  2. MySQL FEJL 1045 (28000):Adgang nægtet for brugeren 'bill'@'localhost' (ved hjælp af adgangskode:JA)

  3. SQL opdeler værdier til flere rækker

  4. 9.6 Scariest Patch Tournament