sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo le digo a MySQL Optimizer que use el índice en una tabla derivada?

Hay una solución para esto en MySQL Server 5.6:la versión preliminar (en el momento de escribir este artículo).

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

Aunque no estoy seguro de si MySQL Optimizer reutilizará los índices que ya existen cuando "agrega índices a la tabla derivada"

Considere la siguiente consulta:

SELECCIONE * DESDE t1 ÚNASE (SELECCIONE * DESDE t2) COMO derivado_t2 EN t1.f1=derivado_t2.f1;

La documentación dice:"El optimizador construye un índice sobre la columna f1 de derivada_t2 si al hacerlo permitiría el uso de acceso de referencia para el plan de ejecución de menor costo".

OK, eso es genial, pero ¿el optimizador reutiliza los índices de t2? En otras palabras, ¿qué pasaría si existiera un índice para t2.f1? ¿Se reutiliza este índice o el optimizador vuelve a crear este índice para la tabla derivada? ¿Quién sabe?

EDITAR: La mejor solución hasta MySQL 5.6 es crear una tabla temporal, crear un índice en esa tabla y luego ejecutar la consulta SELECT en la tabla temporal.