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

Indici e chiavi primarie multi colonna

Non ho familiarità con gli interni degli indici su mySql, ma sui due prodotti del fornitore di database con cui ho familiarità (MsSQL, Oracle) gli indici sono strutture ad albero bilanciato, i cui nodi sono organizzati come una tupla sequenziata delle colonne l'indice è definito su (Nella sequenza definita )

Quindi, a meno che mySql non lo faccia in modo molto diverso, (probabilmente no), qualsiasi indice composito (su più di una colonna) può essere utilizzabile da qualsiasi query che deve filtrare o ordinare in base a un sottoinsieme delle colonne nell'indice, purché l'elenco di colonne sia compatibile, ovvero se le colonne, se sequenziate come l'elenco sequenziato di colonne nell'indice completo, sono un sottoinsieme ordinato dell'insieme completo di colonne dell'indice, che inizia all'inizio della sequenza dell'indice vero e proprio, senza interruzioni se non alla fine...

In altre parole, questo significa che se hai un indice su (a,b,c,d) una query che filtra su (a), (a,b) o (a,b,c) puoi anche usare l'indice , ma una query che deve filtrare su (b), o (c) o (b,c) non sarà in grado di utilizzare l'indice...

Quindi nel tuo caso, se hai spesso bisogno di filtrare o ordinare sulla colonna elemento da solo, devi aggiungere un altro indice su quella colonna da solo...