sql >> Databasteknik >  >> RDS >> Mysql

MySQL slutar använda index när ytterligare begränsningar läggs till

Det här är lite svårt att förklara.

Frågan som använder indexet använder det eftersom indexet är ett "täckande" index. Det vill säga att alla kolumner i indexet finns i frågan. Den enda del av indexet som verkligen används effektivt är villkoret på latitude .

Normalt skulle ett täckande index ha bara kolumnerna som nämns i frågan. Den primära nyckeln används dock för att referera till posterna, så jag gissar att users.Id är den primära nyckeln på bordet. Och indexet skannas efter giltiga värden för latitude .

Frågan som inte använder indexet använder det inte av två anledningar. För det första är villkoren på kolumnerna ojämlikheter. En indexsökning kan bara använda jämställdhetsvillkor och en ojämlikhet. Det betyder att indexet endast kunde användas för latitude i sin mest effektiva metod. För det andra kräver de ytterligare kolumnerna i frågan hur som helst att gå till datasidan.

Med andra ord, optimeraren säger i själva verket:"Varför bry sig om att gå till indexet för att skanna igenom indexet och sedan skanna datasidorna? Istället kan jag bara skanna datasidorna och få allt på en gång."

Din nästa fråga är utan tvekan:"Men hur gör jag min fråga snabbare?" Mitt förslag skulle vara att undersöka spatiala index .




  1. Hur man stoppar FluentPDO från att felaktigt sluta sig till ett tabellnamn

  2. Finns det en MD5 Sum-funktion i PL/SQL

  3. Hur versionerar du ditt databasschema?

  4. Tusen Separator funktion i Oracle?