Bonjour,
Voilà mon problème.
Pour une même requêtes, le résulta de EXPLAIN est différent quand il y a une entrée supplémentaire dans la table FC_poster.
Structure de la DB :
Structure de la table FC_poster :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 FC_name 3 074 MyISAM utf8_unicode_ci 448,6 Kio FC_poster 61 200 MyISAM utf8_unicode_ci 4,7 Mio FC_ratings 61 168 MyISAM utf8_unicode_ci 9,0 Mio
Profilage - EXPLAIN - résult
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Champ Type id mediumint(5) file varchar(80) dater datetime id_name smallint(5) id_account mediumint(6)
Et voilà le résulta avec un enregistrement supplémentaire dans la table FC_poster (donc 61201 entrées)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 Profilage État Durée (initialization) 0.000007 Opening tables 0.000015 System lock 0.000004 Table lock 0.000005 init 0.000004 optimizing 0.000003 statistics 0.000004 preparing 0.000004 executing 0.000014 Sending data 0.000008 end 0.000004 query end 0.000007 freeing items 0.000004 closing tables 0.000003 removing tmp table 0.000005 closing tables 0.000004 logging slow query 0.000003 requête SQL requête SQL: EXPLAIN SELECT T_poster.id, T_poster.file, T_poster.dater, FC_ratings.hits, FC_ratings.total_votes, FC_name.name, FC_name.country, FC_name.id AS IDName FROM FC_poster AS T_poster LEFT JOIN FC_name ON ( T_poster.id_name = FC_name.id ) LEFT JOIN FC_ratings ON ( T_poster.id = FC_ratings.id ) WHERE FC_name.born <= '01-01-1990' ORDER BY T_poster.dater DESC LIMIT 0 , 45 id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE T_poster index id_name dater 8 NULL 61200 1 SIMPLE FC_name eq_ref PRIMARY,born PRIMARY 2 cfake.T_poster.id_name 1 Using where 1 SIMPLE FC_ratings eq_ref id id 3 cfake.T_poster.id 1
Profilage - EXPLAIN - résult
On notera que dans le profilage l'exécution prend bcp de temps (puis mysqld rame à fond).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 Profilage État Durée (initialization) 0.000037 Opening tables 0.000074 System lock 0.000009 Table lock 0.000014 init 0.000016 optimizing 0.00001 statistics 0.000016 preparing 0.000013 executing 0.008459 Sending data 0.000214 end 0.00001 query end 0.00001 freeing items 0.000013 closing tables 0.000013 removing tmp table 0.000023 closing tables 0.000292 logging slow query 0.000011 requête SQL requête SQL: EXPLAIN SELECT T_poster.id, T_poster.file, T_poster.dater, FC_ratings.hits, FC_ratings.total_votes, FC_name.name, FC_name.country, FC_name.id AS IDName FROM FC_poster AS T_poster LEFT JOIN FC_name ON ( T_poster.id_name = FC_name.id ) LEFT JOIN FC_ratings ON ( T_poster.id = FC_ratings.id ) WHERE FC_name.born <= '01-01-1990' ORDER BY T_poster.dater DESC LIMIT 0 , 45 id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE FC_name ALL PRIMARY,born NULL NULL NULL 3074 Using where; Using temporary; Using filesort 1 SIMPLE T_poster ref id_name id_name 2 cfake.FC_name.id 20 1 SIMPLE FC_ratings eq_ref id id 3 cfake.T_poster.id 1
Ce post fait suite à ce 1er post : http://www.developpez.net/forums/d85...ration/entree/
Partager