Mysql
 sql >> Database >  >> RDS >> Mysql

L'ordine dei campi dell'indice multicolonna in MySQL è importante

Quando discuto di indici a più colonne, uso un'analogia con un elenco telefonico. Un elenco telefonico è fondamentalmente un indice del cognome, poi del nome. Quindi l'ordinamento è determinato da quale "colonna" è la prima. Le ricerche rientrano in alcune categorie:

  1. Se cerchi persone il cui cognome è Smith, puoi trovarle facilmente perché il libro è ordinato per cognome.

  2. Se cerchi persone il cui nome è John, l'elenco telefonico non aiuta perché i John sono sparsi per tutto il libro. Devi scansionare l'intera rubrica per trovarli tutti.

  3. Se cerchi persone con un cognome specifico Smith e un nome specifico John, il libro aiuta perché trovi gli Smith ordinati insieme e all'interno di quel gruppo di Smith, anche i John si trovano in ordine.

Se avevi una rubrica ordinata per nome e poi per cognome, l'ordinamento della rubrica ti aiuterà nei casi #2 e #3 sopra, ma non nel caso #1.

Questo spiega i casi per la ricerca di valori esatti, ma cosa succede se stai cercando per intervalli di valori? Supponi di voler trovare tutte le persone il cui nome è John e il cui cognome inizia con "S" (Smith, Saunders, Staunton, Sherman, ecc.). I John sono ordinati sotto "J" all'interno di ciascun cognome, ma se vuoi tutti i John per tutti i cognomi che iniziano con "S", i John non vengono raggruppati insieme. Sono di nuovo sparsi, quindi finisci per dover scansionare tutti i nomi con il cognome che inizia con "S". Mentre se la rubrica fosse organizzata per nome e poi per cognome, troveresti tutti i John insieme, quindi all'interno dei John, tutti i cognomi 'S' verrebbero raggruppati insieme.

Quindi l'ordine delle colonne in un indice a più colonne è sicuramente importante. Un tipo di query potrebbe richiedere un determinato ordine di colonna per l'indice. Se hai diversi tipi di query, potresti aver bisogno di diversi indici per aiutarli, con colonne in ordini diversi.

Puoi leggere la mia presentazione Come progettare gli indici, davvero per ulteriori informazioni.