Bonjour,
J'ai besoin d'optimiser une requête qui dure plus que 7 min sur mon serveur MySQL,
voici la req :
INSERT INTO Tab3 SELECT A.id_1 FROM Tab1 A inner join Tab2 B ON(A.id_1 = B.id_1);
Voici la structure de la table A :
1 2 3 4 5
| CREATE TABLE `Tab1` (
`id_1` int(10) unsigned NOT NULL AUTO_INCREMENT,
`date_update` datetime DEFAULT NULL
PRIMARY KEY (`id_1`),
) ENGINE=MyISAM; |
La structure de la Table B ( Table Memory)
1 2 3 4 5
| CREATE TABLE `Tab2` (
`id_1` int(11) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`id_1`),
KEY `id_1` (`id_1`) USING HASH
) ENGINE=MEMORY ; |
L'explain me donne :
+----+-------------+-------+--------+---------------+---------+---------+------------------------+---------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+--------+---------------+---------+---------+------------------------+---------+-------------+
| 1 | SIMPLE | B | ALL | PRIMARY,id_1 | NULL | NULL | NULL | 2000000 | |
| 1 | SIMPLE | A | eq_ref | PRIMARY | PRIMARY | 4 | bddm_data_59240.B.id_1 | 1 | Using index |
+----+-------------+-------+--------+---------------+---------+---------+------------------------+---------+-------------+
Donc le probléme vient de le faite de parcourir toute la table Memory pourtant qu'elle est indexée !!!
sachant que si je fait un explain sur la table memory uniquement, ça me donne :
mysql> explain select id_1 from Tab2 where id_1 = 54874;
+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------+
| 1 | SIMPLE | Tab2 | const | PRIMARY,id_1 | PRIMARY | 4 | const | 1 | |
+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------+
Merci de Votre Aide.
Partager