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

Cómo hacer que las tablas MySQL bien indexadas se unan de manera efectiva

Vale, he probado esto en más de 30 000 registros por tabla y funciona bastante rápido.

Tal como está actualmente, está realizando una unión en dos mesas masivas actualmente, pero si busca coincidencias en 'val' en cada mesa primero, eso reducirá sustancialmente el tamaño de sus conjuntos de unión.

Originalmente publiqué esta respuesta como un conjunto de subconsultas, pero no me di cuenta de que MySQL es terriblemente lento en las subconsultas anidadas, ya que se ejecuta de afuera hacia adentro. Sin embargo, si define las subconsultas como vistas, las ejecuta de adentro hacia afuera.

Entonces, primero cree las vistas.

CREATE VIEW tbl1_iii AS (
SELECT * FROM tbl1 WHERE val='iii'
);
CREATE VIEW tbl2_iii AS (
SELECT * FROM tbl2 WHERE val='iii'
);

Luego ejecute la consulta.

SELECT tbl1_iii.id from tbl1_iii,tbl2_iii
WHERE tbl1_iii.id = tbl2_iii.id;

Relámpago.