Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como digo ao MySQL Optimizer para usar o índice em uma tabela derivada?


Existe uma solução para isso no MySQL Server 5.6 - a versão de visualização (no momento da redação deste artigo).

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

Embora não tenha certeza se o MySQL Optimizer reutilizará índices que já existem quando "adicionar índices à tabela derivada"

Considere a seguinte consulta:

SELECT * FROM t1JOIN (SELECT * FROM t2) AS derivado_t2 ON t1.f1=derived_t2.f1;

A documentação diz:"O otimizador constrói um índice sobre a coluna f1 de derivada_t2 se isso permitir o uso de acesso ref para o plano de execução de menor custo."

OK, isso é ótimo, mas o otimizador reutiliza índices de t2? Em outras palavras, e se existisse um índice para t2.f1? Esse índice é reutilizado ou o otimizador recria esse índice para a tabela derivada? Quem sabe?

EDITAR: A melhor solução até o MySQL 5.6 é criar uma tabela temporária, criar um índice nessa tabela e então executar a consulta SELECT na tabela temporária.