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

Proč zde MySQL vždy nepoužívá slučování indexů?

Páni! To je nejsložitější „sloučení indexů“, jaké jsem kdy viděl.

Obvykle (možná vždy ), můžete vytvořit „složený“ index, který nahradí index-merge-intersect, a dosáhnete lepšího výkonu . Změňte key2 pouze z (pinned) na (pinned, DeviceId) . To může zbavit se 'průniku' a urychlit to.

Obecně platí, že Optimalizátor používá slučování indexů pouze v zoufalství. (Myslím, že toto je odpověď na otázku v názvu.) Jakékoli drobné změny v dotazu nebo příslušných hodnotách a Optimalizátor provede dotaz bez sloučení indexu.

Vylepšení dočasné tabulky __codes je vytvořit trvalou tabulku s velkým rozsahem hodnot a poté použít rozsah hodnot z této tabulky ve svém Proc. Pokud používáte MariaDB, použijte dynamicky vytvořenou tabulku „sekvence“. Například 'tabulka' seq_1_to_100 je efektivní tabulka jednoho sloupce s čísly 1..100. Není třeba jej deklarovat nebo vyplňovat.

Můžete se zbavit dalšího REPEAT smyčka pomocí výpočtu čas z Code .

Vyhněte se LOOPs bude největší výkonnostní výhodou.

Udělejte vše, pak mám možná další tipy.




  1. psycopg2 ve skutečnosti nevkládá data

  2. PHP MySQL Delete funkce ve smyčce while

  3. Jak optimalizovat dotazy v databázi – základy

  4. Oracle:OALL8 je v nekonzistentním stavu