Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Indeksy SQL Server — rosnąco czy malejąco, co to za różnica?

Ma to znaczenie przede wszystkim w przypadku użycia z indeksami złożonymi:

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

może być używany do:

SELECT  *
FROM    mytable
ORDER BY
        col1, col2 DESC

lub:

SELECT  *
FROM    mytable
ORDER BY
        col1 DESC, col2

, ale nie dla:

SELECT  *
FROM    mytable
ORDER BY
        col1, col2

Indeks w pojedynczej kolumnie może być efektywnie wykorzystany do sortowania na dwa sposoby.

Zobacz artykuł na moim blogu, aby uzyskać szczegółowe informacje:

  • Zstępujące indeksy

Aktualizacja:

W rzeczywistości może to mieć znaczenie nawet dla indeksu pojedynczej kolumny, choć nie jest to takie oczywiste.

Wyobraź sobie indeks w kolumnie tabeli zgrupowanej:

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

Indeks w col1 przechowuje uporządkowane wartości col1 wraz z odniesieniami do wierszy.

Ponieważ tabela jest zgrupowana, odniesienia do wierszy są w rzeczywistości wartościami pk . Są one również uporządkowane w ramach każdej wartości col1 .

Oznacza to, że liście indeksu są w rzeczywistości uporządkowane według (col1, pk) i to zapytanie:

SELECT  col1, pk
FROM    mytable
ORDER BY
        col1, pk

nie wymaga sortowania.

Jeśli utworzymy indeks w następujący sposób:

CREATE INDEX ix_mytable_col1_desc ON mytable (col1 DESC)

, a następnie wartości col1 zostaną posortowane malejąco, ale wartości pk w każdej wartości col1 zostaną posortowane rosnąco.

Oznacza to, że następujące zapytanie:

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

może być obsługiwany przez ix_mytable_col1_desc ale nie przez ix_mytable_col1 .

Innymi słowy, kolumny, które tworzą CLUSTERED INDEX w dowolnej tabeli są zawsze końcowe kolumny dowolnego innego indeksu w tej tabeli.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pobierz lewą część ciągu w SQL Server (T-SQL)

  2. Jak zaktualizować klucz podstawowy

  3. Jak dodać ciąg z wartością automatycznego przyrostu w programie SQL Server?

  4. SQL Server - połącz się z uwierzytelnianiem Windows

  5. Różnica między sys.parameters, sys.system_parameters i sys.all_parameters w programie SQL Server