De kosten van het onderhouden van een index (enkelkoloms of meerdere kolommen) wegen bijna altijd niet op tegen de prestatieverbetering wanneer die index wordt gebruikt. Het is een kleine verhoging op elke INSERT
/DELETE
, plus kosten als u de waarde van een geïndexeerd veld wijzigt via UPDATE
. (De UPDATE
geval is zeldzaam.) Maak u dus geen zorgen over de kosten van "het bijhouden van een samengestelde index".
WHERE `vehicles`.`type` IN ('Car')
AND `vehicles`.`user_id` = 10
heeft INDEX(user_id, type)
nodig .
De optimizer zal
- ontdek dat die index een mogelijke kandidaat is,
- controleer wat statistieken, dan
- gebruik de index, of besluit dat de kardinaliteit slecht is en scan gewoon de tabel.
Voeg de index toe; maak je geen zorgen.
Ik heb de velden op die manier besteld, niet (type, user_id)
op basis van uw IN
, wat inhoudt dat je soms meerdere waarden hebt voor type
.
Als alle rijen in de tabel type = 'Car'
. hebben , geen probleem. Alles wat ik heb gezegd is nog steeds van toepassing. De verspilling van het toevoegen van het onnodige type
is onbeduidend.
Het is beter om alle "=" kolom(men) eerst in een index te hebben, dan maximaal één ander veld. Verdere discussie hier .