sql >> Databasteknik >  >> RDS >> Mysql

Hur bygger man index i MySQL för att påskynda denna fråga?

För att verkligen ge ett svar skulle det vara användbart att se om du redan har befintliga index, men...

Allt detta förutsätter att tabellen 't' existerar och att du behöver lägga till ett index och att du för närvarande bara har ett enda index på din primärnyckel eller inga index alls.

Ett täckande index för frågan ger bästa prestanda för dina behov, men med vilket index som helst offrar du en viss insättningshastighet. Hur mycket det uppoffringen betyder beror på din applikations profil. Om du läser mest från tabellen spelar det inte så stor roll. Om du bara har några få index spelar inte ens en måttlig skrivbelastning någon roll. Begränsat lagringsutrymme för dina bord kan också spela in... Du måste göra den slutliga utvärderingen av avvägningen och om den är märkbar. Det som är bra är att det är en ganska konstant hit. Att lägga till ett index saktar vanligtvis inte insättningarna exponentiellt, bara linjärt.

Oavsett vilket, här är dina alternativ för bästa valda prestanda:

  1. Om c3 är din primära nyckel för tabell t, kan du inte göra något bättre i frågan för att göra det snabbare med ett index.
  2. Förutsatt att c1 är din primära nyckel t:

    ALTER TABLE t ADD INDEX covering_index (c3,c2);  
    
  3. Om c1 inte är din pk (och inte heller c2), använd detta:

    ALTER TABLE t ADD INDEX covering_index (c3,c2,c1);  
    
  4. Om c2 är din PK använd detta:

    ALTER TABLE t ADD INDEX covering_index (c3,c1);  
    
  5. Om utrymme på disk eller insättningshastighet är ett problem kan du välja att göra ett punktindex. Du kommer att offra lite prestanda, men om du sätter tungt kan det vara rätt alternativ:

    ALTER TABLE t ADD INDEX a_point_index (c3);  
    


  1. Dåliga vanor :Fokuserar bara på diskutrymme när du väljer nycklar

  2. hibernate, mysql, glassfish v3 och JTA datakälla

  3. Med sqlalchemy hur man dynamiskt binder till databasmotorn per begäran

  4. Skapa rabattkodsystem (MySQL/php)