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

Existuje optimální metoda pro objednání složeného indexu MySQL?

Obecně platí, že ve vícesloupcovém indexu chcete, aby sloupce, které mají nejvyšší mohutnost, nebo jinými slovy, nejvyšší počet odlišných hodnot, byly v indexu na prvním místě.

Abychom byli přesnější, chcete nejprve sloupec s co nejmenším počtem shod s vašimi vyhledávacími kritérii, abyste mohli co nejvíce zúžit sadu výsledků, ale obecně je to stejné jako nejvyšší mohutnost.

Ve vašem příkladu tedy budete chtít, aby sloupec, který bude mít miliony různých hodnot, byl v indexu před sloupcem s pouze 6 odlišnými hodnotami.

Za předpokladu, že vybíráte pouze jeden řádek z milionů hodnot, umožňuje vám to rychleji odstranit více řádků.

Při zvažování dvou sloupců podobné mohutnosti dejte na první místo ten menší (INTEGER sloupce před VARCHAR sloupce), protože MySQL je může rychleji porovnávat a iterovat.

Jednou výhradou je, že pokud vybíráte s rozsahy (např. WHERE datecol > NOW() ), pak chcete, aby sloupce rozsahu byly nejvíce vpravo a vaše sloupce s jednou konstantou (např. WHERE id = 1 ) doleva. Důvodem je, že váš index lze použít pouze pro vyhledávání a řazení až do bodu první hodnoty rozsahu.




  1. #1071 - Zadaný klíč byl příliš dlouhý; maximální délka klíče je 1000 bajtů

  2. Konfigurační soubor hibernace (.cfg.xml) pro mapování více tabulek MySQL ve stejné databázi?

  3. Jak zdokumentovat databázi SQL Server

  4. Jedinečné omezení ORA-00001 porušeno