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

výkonné řazení klíčů ve složeném indexu MySQL (WRT Rails Polymorphic Associations a STI)

Ze svého vlastního výzkumu (ale nejsem žádný odborník na DBA) jsem se naučil, že při rozhodování o pořadí indexu složeného klíče je třeba vzít v úvahu dvě věci.

Za prvé, pokud jde o mohutnost sloupců, index obecně lépe prohledává sloupce s vysokou mohutností. Přikláněl bych se tedy k umístění sloupce s nejvyšší mohutností na první místo v indexu. Pro informaci je zde článek s názvem Optimalizace dotazů MySQL to říká:

Ve vašem případě _id Sloupce by jednoznačně lépe odpovídaly této definici, takže jsou lepším kandidátem na to, aby byly předponou klíče.

Další věcí, kterou je třeba zvážit, by byla opětovná použitelnost těchto indexů. Většina (pokud ne všechny) databázové systémy umožňují opětovné použití předpony složeného klíče. Například složený klíč na (owner_id, owner_type) může být také použito pro dotazy na owner_id ale ne na owner_type .

Takže z toho, co jste vysvětlili ve své otázce, by vám možná lépe vyhovovaly dva indexy:složený klíčový index na (owner_id, owner_type) a další na (owner_type) .

Nakonec to opravdu všechno závisí na vaší datové sadě a dotazech. Vyzkoušejte více scénářů, benchmarky pomocí různého řazení složených klíčů, abyste viděli, jaké je nejoptimálnější řešení. Nezapomínejte také, že indexy jsou penalizovány zápisem do vašich tabulek.

Aktualizovat :Je zde také další poměrně populární SO otázka týkající se indexu složeného klíče:

Kdy mám použít složený index?



  1. Používáte databázovou vrstvu Django mimo Django?

  2. Jak uložit 1.1.1900 3:54:32 v MySQL?

  3. Jak přidat komentáře do tabulky nebo sloupce v mysql pomocí SQLAlchemy?

  4. Objective-C a MySQL