sql >> Databasteknik >  >> RDS >> Mysql

Kommer ett sammansatt index med en andra kolumn med låg kardinalitet att påverka prestanda tillräckligt för att det ska användas?

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 . (UPPDATERING fall är sällsynt.) Så oroa dig inte för kostnaden för att "upprätthålla ett sammansatt index".

WHERE `vehicles`.`type` IN ('Car')
  AND `vehicles`.`user_id` = 10

behöver INDEX(användar-id, typ) .

Optimeraren kommer

  1. upptäck att det indexet är en möjlig kandidat,
  2. kolla lite statistik sedan
  3. 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 .




  1. Oracle SQL pivotfråga

  2. MySQL-replikering och utlösare

  3. Skapa en CHECK-begränsning i SQLite

  4. flask-login:kan inte förstå hur det fungerar