sql >> Database >  >> RDS >> Sqlserver

Hoe belangrijk is de volgorde van kolommen in indexen?

Bekijk een index als deze:

Cols
  1   2   3
-------------
|   | 1 |   |
| A |---|   |
|   | 2 |   |
|---|---|   |
|   |   |   |
|   | 1 | 9 |
| B |   |   |
|   |---|   |
|   | 2 |   |
|   |---|   |
|   | 3 |   |
|---|---|   |

Zie hoe beperken op A eerst, aangezien uw eerste kolom meer resultaten elimineert dan beperken op uw tweede kolom eerst? Het is gemakkelijker als je je voorstelt hoe de index moet worden doorlopen, kolom 1, dan kolom 2, enz... je ziet dat het wegknippen van de meeste resultaten in de eerste pas de 2e stap veel sneller maakt.

In een ander geval, als je kolom 3 opvraagt, zou de optimizer de index niet eens gebruiken, omdat het helemaal niet helpt bij het verfijnen van de resultatensets. Telkens wanneer u een zoekopdracht uitvoert, betekent het beperken van het aantal resultaten dat moet worden verwerkt voordat de volgende stap wordt uitgevoerd, betere prestaties.

Omdat de index ook op deze manier wordt opgeslagen, is er geen backtracking over de index om de eerste kolom te vinden wanneer u ernaar zoekt.

Kortom:Nee, het is niet voor de show, er zijn echte prestatievoordelen.



  1. SELECT DISTINCT is langzamer dan verwacht op mijn tafel in PostgreSQL

  2. stel een leeg wachtwoord in voor PostgreSQL-gebruiker

  3. MySQL relationele databases gebruiken op Fedora 12

  4. Queryresultaten exporteren naar een .txt-bestand bij gebruik van SQLcl (Oracle)