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

Více indexů MySQL vs vícesloupcový index pro vyhledávání

Musíte pochopit, že MySQL (v případě InnoDB) používá pouze předponu nejvíce vlevo z vašich indexů. Pokud je tedy index v Pole1 + Pole2, dotazování pouze pomocí Pole2 v KDE nemůže využít celý index.

A pokud Field1 + Field2 + Field3 je index, dotaz obsahující pouze Field1 & Field3 v WHERE stalo by se to samé.

Možnost 1

Pokud chcete optimalizovat každé vyhledávání, museli byste pro každý scénář vyhledávání vytvořit samostatný index. Pokud jsou však tabulky velké, indexy by byly také extrémně velké. Pokud jsou tyto vyhledávací dotazy zadávány velmi často, stálo by to za to.

Možnost 2

Pokud mají vaše vyhledávání nízkou selektivitu, můžete použít šikovný trik (tj. Pohlaví) tak, že sloupce s nízkou selektivitou dáte úplně vlevo a použijete Gender IN(M, F) zahrnout jej do KDE klauzule spolu s ostatními sloupci, abyste využili celý index.



  1. NHibernate.Mapping Exception. Žádný persister pro Namespace.className

  2. Proč dostanu Resource id #4, když použiji print_r() na pole v PHP?

  3. array_push() vs. $array[] =.... Který je nejrychlejší?

  4. SQL dotaz pro načtení SUM v různých rozsazích DATE