Kylie:
¿Es posible crear índices sobre tablas que abarcan? Supongamos que quiero para optimizar esta consulta:
SELECT tbl1.col1,
tbl2.col2
FROM tbl1 INNER JOIN
tbl2 ON tbl1.col1 = tbl2.col1
WHERE tbl1.col3 = ...
Será la creación de estos índices de ayuda?
INDEX (col3, col1) -- tbl1's
INDEX (col1, col2) -- tbl2's
Rick James:
Suponiendo que esta es la consulta completa ...
SELECT a.col1, b.col2
FROM tbl1 AS a
INNER JOIN tbl2 AS b ON a.col1 = b.col1
WHERE a.col3 = constant
Análisis:
Debido a la cláusula WHERE, tbl1 se miraba primero y este será el índice óptimo:
INDEX(col3, col1) == handles the WHERE, plus it is "covering"
A continuación, el bucle anidado Ingreso en TBL2 tendrá un índice a partir de col
:
INDEX(col1, col2) -- again "covering"
Ver también http://mysql.rjweb.org/doc.php/index_cookbook_mysql
El título ( "... lapso de dos tablas") es engañosa. Ninguno de estos índices implica más de una tabla. INDEX(col2, col3)
no es posible porque se trata de más de una tabla.