sql >> Databáze >  >> RDS >> Mysql

Bude složený index s druhým sloupcem s nízkou mohutností ovlivňovat výkon natolik, že by měl být použit?

Náklady na údržbu indexu (jednosloupcového nebo vícesloupcového) téměř vždy převáží zlepšení výkonu při použití tohoto indexu. Je to malý přírůstek na každém INSERT /DELETE , plus náklady, pokud změníte hodnotu indexovaného pole pomocí UPDATE . (UPDATE případ je vzácný.) Nebojte se tedy nákladů na "udržování složeného indexu".

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

potřebuje INDEX(user_id, type) .

Optimalizátor bude

  1. zjistit, že tento index je možným kandidátem,
  2. potom zkontrolujte nějaké statistiky
  3. buď použijte index, nebo se rozhodněte, že mohutnost je nízká, a jednoduše naskenujte tabulku.

Zahrnout index; nedělejte si s tím starosti.

Pole jsem seřadil tímto způsobem, nikoli (type, user_id) na základě vašeho IN , což znamená, že někdy můžete mít více hodnot pro type .

Pokud všechny řádky v tabulce obsahují type = 'Car' , žádný problém. Vše, co jsem řekl, stále platí. Plýtvání zahrnutím zbytečného type je bezvýznamná.

Je lepší mít všechny sloupce „=“ nejprve v indexu, pak maximálně jedno další pole. Další diskuse zde .




  1. jak spojit 2 stoly

  2. Jak importovat databázi pomocí příkazového řádku

  3. Systém Windows nemůže najít „http://.127.0.0.1:%HTTPPORT%/apex/f?p=4950“. Ujistěte se, že jste jméno zadali správně, a zkuste to znovu

  4. Datové modelování pro stejné tabulky se stejnými sloupci