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

Výkon Mysql v tabulce s 6 miliony řádků

Chcete se ujistit, že dotaz bude používat POUZE index, takže se ujistěte, že index pokrývá všechna pole, která vybíráte. Vzhledem k tomu, že se jedná o dotaz na rozsah, musíte mít v indexu na prvním místě venid, protože je dotazován jako konstanta. Proto bych vytvořil a indexoval takto:

ALTER TABLE events ADD INDEX indexNameHere (venid, date, time);

S tímto indexem jsou všechny informace potřebné k dokončení dotazu v indexu. To znamená, že doufejme, že úložný modul je schopen načíst informace, aniž by skutečně hledal uvnitř samotné tabulky. MyISAM to však nemusí umět, protože neukládá data do listů indexů, takže nemusíte dosáhnout požadovaného zvýšení rychlosti. Pokud je to tak, zkuste vytvořit kopii tabulky a použijte na kopii engine InnoDB. Opakujte stejné kroky a uvidíte, zda se výrazně zvýší rychlost. InnoDB dělá uložit hodnoty polí do indexových listů a umožnit zakrytí indexů.

Doufejme, že nyní při vysvětlování dotazu uvidíte následující:

mysql> EXPLAIN SELECT date, time FROM events WHERE venid='47975' AND date>='2009-07-11' ORDER BY date;

id  select_type table  type  possible_keys        key       [..]  Extra
1   SIMPLE   events range date_idx, indexNameHere indexNameHere   Using index, Using where


  1. Je mezi těmito dvěma dotazy rozdíl?

  2. Ukládání binárních datových typů na SQL Server

  3. Klauzule WHERE používající hodnoty, které mohou být NULL

  4. Chyba SQLiteConstraintException se zobrazuje po zahájení každé aktivity