sql >> Database >  >> RDS >> Mysql

Zal een samengestelde index met een tweede kolom met een lage kardinaliteitseffectprestatie voldoende zijn om deze te gebruiken?

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

  1. ontdek dat die index een mogelijke kandidaat is,
  2. controleer wat statistieken, dan
  3. 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 .




  1. OraOLEDB.Oracle-provider is niet geregistreerd op de lokale computer

  2. Tijdstempel afronden in MySQL

  3. Controleer of dit duplicaat is

  4. PHP ORA-01745:ongeldige host/bind variabele naam Waarschuwing