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

Používá MySQL existující indexy při vytváření nových indexů?

Ne, nebude.

Teoreticky index na (site, product, value, id) má vše potřebné k vytvoření indexu na jakékoli podmnožině těchto polí (včetně indexů na (product, value, id) a (value, id) ).

Sestavení indexu ze sekundárního indexu však není podporováno.

Nejprve MySQL nepodporuje rychlé úplné skenování indexu (to znamená skenování indexu ve fyzickém pořadí, nikoli logickém), takže přístupová cesta k indexu je dražší než čtení tabulky. Pro InnoDB to není problém , protože samotná tabulka je vždy seskupená.

Zadruhé, pořadí záznamů v těchto indexech je zcela odlišné, takže záznamy je třeba stejně třídit.

Hlavním problémem je však rychlost vytváření indexu v MySQL spočívá v tom, že generuje objednávku na místě (stačí vkládat záznamy jeden po druhém do B-Tree ) namísto použití předřazeného zdroje. Jak zmínil @Daniel, rychlý vytváření indexu tento problém řeší. Je k dispozici jako plugin pro 5.1 a je předinstalovaný v 5.5 .



  1. Jak přidat 1 hodinu do currrent_timestamp v mysql, což je výchozí hodnota?

  2. MySQL - Jak vybrat řádky s maximální hodnotou pole

  3. Seskupit podle rozsahu X dní

  4. Obecné procházení stromu (nekonečno) způsobem prohledávání do šířky