Kostnaden för att upprätthålla ett index (enkolumn eller flera kolumn) uppvägs nästan alltid av prestandaförbättringen när det indexet används. Det är ett litet steg på varje INSERT
/RADERA
, plus en kostnad om du ändrar värdet på ett indexerat fält via UPPDATERING
. (
WHERE `vehicles`.`type` IN ('Car')
AND `vehicles`.`user_id` = 10
behöver INDEX(användar-id, typ)
.
Optimeraren kommer
- upptäck att det indexet är en möjlig kandidat,
- kolla lite statistik sedan
- Använd indexet eller bestäm att kardinaliteten är dålig och skanna helt enkelt tabellen.
Inkludera indexet; oroa dig inte för det.
Jag beställde fälten på det sättet, inte (typ, användar-id)
baserat på din IN
, vilket innebär att du ibland kan ha flera värden för typ
.
Om alla rader i tabellen har typ ='Bil'
, inga problem. Allt jag har sagt gäller fortfarande. Slöseri med att inkludera den onödiga typen
är obetydlig.
Det är bättre att ha alla "=" kolumner först i ett index, sedan högst ett annat fält. Ytterligare diskussion här .