Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment faire en sorte que des tables MySQL bien indexées se rejoignent efficacement

OK, j'ai testé cela sur plus de 30 000 enregistrements par table et cela fonctionne très rapidement.

Dans l'état actuel des choses, vous effectuez actuellement une jointure sur deux tables massives, mais si vous recherchez d'abord des correspondances sur 'val' sur chaque table, cela réduira considérablement la taille de vos jeux de jointures.

J'ai initialement publié cette réponse sous la forme d'un ensemble de sous-requêtes, mais je n'avais pas réalisé que MySQL était extrêmement lent pour les sous-requêtes imbriquées, car il s'exécute de l'extérieur vers l'intérieur. Cependant, si vous définissez les sous-requêtes comme des vues, il les exécute de l'intérieur.

Donc, commencez par créer les vues.

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

Exécutez ensuite la requête.

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

Foudre.