sql >> Databasteknik >  >> RDS >> Mysql

Spelar ordningsföljden av fält med flera kolumnindex i MySQL någon roll

När jag diskuterar index med flera kolumner använder jag en analogi till en telefonbok. En telefonbok är i grunden ett register över efternamn, sedan förnamn. Så sorteringsordningen bestäms av vilken "kolumn" som är först. Sökningar delas in i några kategorier:

  1. Om du slår upp personer som har Smith i efternamn kan du enkelt hitta dem eftersom boken sorteras efter efternamn.

  2. Om du slår upp personer som har John i förnamn, hjälper inte telefonboken eftersom Johns är utspridda i boken. Du måste skanna hela telefonboken för att hitta dem alla.

  3. Om du slår upp personer med ett specifikt efternamn Smith och ett specifikt förnamn John, hjälper boken eftersom du hittar Smiths sorterade tillsammans, och inom den gruppen av Smiths finns Johns också i sorterad ordning.

Om du hade en telefonbok sorterad efter förnamn och sedan efter efternamn, skulle sorteringen av boken hjälpa dig i ovanstående fall #2 och #3, men inte fall #1.

Det förklarar fall för att leta upp exakta värden, men vad händer om du slår upp efter värdeintervall? Säg att du ville hitta alla personer vars förnamn är John och vars efternamn börjar med 'S' (Smith, Saunders, Staunton, Sherman, etc.). Johns sorteras under 'J' inom varje efternamn, men om du vill ha alla Johns för alla efternamn som börjar med 'S', grupperas inte Johns tillsammans. De är utspridda igen, så det slutar med att du måste skanna igenom alla namn med efternamn som börjar med 'S'. Om telefonboken var organiserad efter förnamn och sedan efter efternamn, skulle du hitta alla Johns tillsammans, och sedan inom Johns skulle alla "S" efternamn grupperas tillsammans.

Så ordningen på kolumner i ett index med flera kolumner har definitivt betydelse. En typ av fråga kan behöva en viss kolumnordning för indexet. Om du har flera typer av frågor kan du behöva flera index för att hjälpa dem, med kolumner i olika ordningsföljder.

Du kan läsa min presentation Hur man designar index, verkligen för mer information.



  1. Oracle - ORA-06502:PL/SQL:numeriskt eller värdefel (DBMS_OUTPUT)

  2. Hur kör man två mysql-frågor som en i PHP/MYSQL?

  3. kan inte släppa den främmande nyckeln

  4. Inkrementell datamaskering och mappning:Upptäcker ändringar och uppdaterar...