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

Zlepšení výkonu MySQL na dotazu Run-Once s velkou datovou sadou

Domnívám se, že s nepodepsaným int a varchar 40 (zejména varchar!) máte nyní OBROVSKÝ primární klíč a váš indexový soubor je příliš velký, aby se vešel do jakékoli RAM, kterou máte pro Innodb_buffer_pool. To by InnoDB přimělo spoléhat se na disk, aby vyměnil indexové stránky při prohledávání, a to je HODNĚ prohledávání disku a ne mnoho práce CPU.

Jedna věc, kterou jsem pro podobný problém udělal, je použít něco mezi skutečně přirozeným klíčem a náhradním klíčem. Vzali bychom 2 pole, která jsou ve skutečnosti jedinečná (jedno z nich bylo také varchar) a v aplikační vrstvě bychom vytvořili hash MD5 s pevnou šířkou a použili bychom TO jako klíč. Ano, znamená to více práce pro aplikaci, ale vytváří to mnohem menší soubor indexu, protože již nepoužíváte pole libovolné délky.

NEBO můžete použít server se spoustou paměti RAM a zjistit, zda se index vejde do paměti, ale já vždy rád udělám „nahodit hardware“ jako poslední možnost :)




  1. mysql smazat při připojení?

  2. Jak spustíte SQL z bash skriptu?

  3. Zobrazit tabulky v databázi SQLite v Pythonu

  4. snadné způsoby výběru řádků ze všech tabulek