Svarar på dina frågor:
-
Är
possible_keys
indexen MySQL kanske vill använda ochkeys
är de index som MySQL verkligen använder? Ja detta är korrekt. -
Varför är indexet
index_status_mit_spam
inte använd? I frågan har kolumnerna samma ordning som i indexet. SQL använder statistik på tabellens index för att bestämma vilket index som ska användas. ordningen på fälten i select-satsen har INGEN effekt på vilket index som ska användas. Statistik kring index inkluderar information som indexets unika karaktär och annat. Mer unika index kommer sannolikt att användas. Läs mer om detta här:http ://dev.mysql.com/doc/innodb/1.1/en/innodb-other-changes-statistics-estimation.html eller här:http://dev.mysql .com/doc/refman/5.0/en//myisam-index-statistics.html . Dessa faktorer avgör hur MySQL kommer att välja ett index att använda. Den kommer bara att använda ETT index . -
Varför är indexet
index_datum
används inte förORDER BY
? MySQL kommer bara att använda ett index inte två under en fråga, eftersom användning av ett andra index kommer att sakta ner frågan ännu mer. Att läsa ett index är INTE att läsa tabellen. Detta är relaterat till frågans operativa effektivitet. Här är svar som kan förklara några begrepp:https://dba.stackexchange.com/questions/18528/performance-difference-between-clustered-and-non-clustered-index/18531#18531 Eller Genom att lägga till gränsklausul till MySQL-frågan saktar det ner dramatiskt Eller MySQL-index och när man ska gruppera dem . Dessa svar har många detaljer som hjälper dig att förstå MySQL-indexering. -
Hur kan jag optimera mina tabellindex eller frågan? (Frågan ovan tar upp till 3 sekunder med ungefär en miljon poster i tabellen). Det finns en filsortering här som förmodligen saktar ner dig. Det kan vara så att tabellen har för många index och att MySQL väljer fel.
Du måste förstå att index påskyndar läsningar och saktar ner skrivningar till tabeller. Så att bara lägga till index är inte alltid en bra idé. Ovanstående svar och tips bör hjälpa dig att få en solid förståelse.