sql >> Database >  >> RDS >> Mysql

Is de volgorde van velden van de index met meerdere kolommen in MySQL van belang?

Bij het bespreken van indexen met meerdere kolommen, gebruik ik een analogie met een telefoonboek. Een telefoonboek is in feite een index op achternaam, dan voornaam. Dus de sorteervolgorde wordt bepaald door welke "kolom" eerst is. Zoekopdrachten vallen in een paar categorieën:

  1. Als je mensen opzoekt wiens achternaam Smith is, kun je ze gemakkelijk vinden omdat het boek op achternaam is gesorteerd.

  2. Als je mensen opzoekt wiens voornaam John is, helpt het telefoonboek niet omdat de Johns door het boek verspreid staan. Je moet het hele telefoonboek scannen om ze allemaal te vinden.

  3. Als je mensen opzoekt met een specifieke achternaam Smith en een specifieke voornaam John, helpt het boek omdat je de Smiths bij elkaar gesorteerd vindt, en binnen die groep Smiths worden de Johns ook in gesorteerde volgorde gevonden.

Als u een telefoonboek had gesorteerd op voornaam en vervolgens op achternaam, zou het sorteren van het boek u helpen in de bovenstaande gevallen #2 en #3, maar niet in geval #1.

Dat verklaart gevallen voor het opzoeken van exacte waarden, maar wat als u zoekt op waardenbereiken? Stel dat u alle mensen wilt vinden wiens voornaam John is en wiens achternaam begint met 'S' (Smith, Saunders, Staunton, Sherman, enz.). De Johns zijn gesorteerd onder 'J' binnen elke achternaam, maar als je alle Johns wilt voor alle achternamen die beginnen met 'S', worden de Johns niet gegroepeerd. Ze zijn weer verspreid, dus je moet alle namen doorzoeken waarvan de achternaam begint met 'S'. Terwijl als het telefoonboek op voornaam en dan op achternaam zou zijn gerangschikt, je alle Johns bij elkaar zou vinden, en binnen de Johns zouden alle 'S'-achternamen bij elkaar worden gegroepeerd.

Dus de volgorde van kolommen in een index met meerdere kolommen is zeker van belang. Voor één type query kan een bepaalde kolomvolgorde voor de index nodig zijn. Als je verschillende soorten zoekopdrachten hebt, heb je misschien meerdere indexen nodig om ze te helpen, met kolommen in verschillende volgorde.

Je kunt mijn presentatie lezen Hoe indexen te ontwerpen, echt voor meer informatie.



  1. Django kan MySQLdb python-module niet vinden

  2. Hoe verander ik het VARCHAR-type in DATETIME met ALTER in MySQL?

  3. PostgreSQL- en TimescaleDB-back-upherstel met ClusterControl CLI

  4. Dubbele gegevensproblemen en hoe ze op te lossen