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

Jak řeknu optimalizátoru MySQL, aby použil index na odvozené tabulce?

V MySQL Server 5.6 existuje řešení - verze Preview (v době psaní tohoto článku).

http://dev.mysql.com /doc/refman/5.6/en/from-clause-subquery-optimization.html

Nejsem si však jistý, zda nástroj MySQL Optimizer znovu použije indexy, které již existují, když „přidá indexy do odvozené tabulky“

Zvažte následující dotaz:

SELECT * FROM t1JOIN (SELECT * FROM t2) AS derivované_t2 ON t1.f1=derived_t2.f1;

Dokumentace říká:"Optimalizátor vytvoří index přes sloupec f1 z derivovaného_t2, pokud by to umožnilo použití přístupu ref pro plán provádění s nejnižšími náklady."

Dobře, to je skvělé, ale používá optimalizátor znovu indexy z t2? Jinými slovy, co když existuje index pro t2.f1? Je tento index znovu použit, nebo optimalizátor znovu vytvoří tento index pro odvozenou tabulku? Kdo ví?

UPRAVIT: Nejlepším řešením do MySQL 5.6 je vytvořit dočasnou tabulku, vytvořit na ní index a poté spustit dotaz SELECT na dočasnou tabulku.



  1. Microsoft Access DevCon ve Vídni Rakousko 1. – 2. dubna 2017

  2. Jaký je nejvíce doporučený způsob ukládání času v PostgreSQL pomocí Javy?

  3. Jak opravit ERROR 1130 (HY000):Hostitel se nemůže připojit k tomuto serveru MySQL

  4. Analyzujte JSON v TSQL