Bonjour,

Je souhaiterai optimiser la requête suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
SELECT a.id, DATE_FORMAT(a.temps, '%d-%m-%Y') as photo_temps, a.serveur, a.immatriculation, a.immatriculation_texte, a.id_unique, a.version, a.numero_serie, a.proprietaire, a.lieu_pays, a.lieu_type, a.lieu_aeroport, a.orientation, b.version as version_nom, c.type as proprietaire_type, c.nom as proprietaire_nom, c.url_rewriting as proprietaire_ur, c.oaci as proprietaire_oaci, d.login, d.nom, d.prenom, e.nom_fr as aeroport_nom, e.oaci as aeroport_oaci, e.aita as aeroport_aita, f.nom_fr as pays_nom, f.code as pays_code FROM photos a INNER JOIN versions b ON a.version = b.id INNER JOIN proprietaires c ON a.proprietaire = c.id INNER JOIN membres d ON a.membre = d.id LEFT JOIN aeroports e ON a.lieu_aeroport = e.id LEFT JOIN pays f ON a.lieu_pays = f.id WHERE a.statut = '4' AND a.numero_serie = '1' ORDER BY a.temps ASC LIMIT 0, 20
En effet, voici un EXPLAIN de cette requête :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
id 	select_type 	table 	type 	possible_keys 	key 	key_len 	ref 	rows 	Extra
1 	SIMPLE 	a 	ref 	membre,statut,version,proprietaire 	statut 	1 	const 	6 	Using where; Using temporary; Using filesort
1 	SIMPLE 	d 	ALL 	PRIMARY 	NULL 	NULL 	NULL 	3 	Using where
1 	SIMPLE 	b 	eq_ref 	PRIMARY 	PRIMARY 	4 	pictaero_com.a.version 	1 	 
1 	SIMPLE 	c 	eq_ref 	PRIMARY 	PRIMARY 	4 	pictaero_com.a.proprietaire 	1 	 
1 	SIMPLE 	e 	eq_ref 	PRIMARY 	PRIMARY 	4 	pictaero_com.a.lieu_aeroport 	1 	 
1 	SIMPLE 	f 	eq_ref 	PRIMARY 	PRIMARY 	2 	pictaero_com.a.lieu_pays 	1
Ce sont les 2 premières lignes de cet EXPLAIN qui me dérangent un peu ! J'ai plusieurs index sur ces tables, et j'ai les index suivant sur la table "photos" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
Table 	Non_unique 	Key_name 	Seq_in_index 	Column_name 	Collation 	Cardinality 	Sub_part 	Packed 	Null 	Index_type 	Comment
photos 	0 	PRIMARY 	1 	id 	A 	9 	NULL 	NULL 	  	BTREE 	 
photos 	1 	membre 	1 	membre 	A 	1 	NULL 	NULL 	  	BTREE 	 
photos 	1 	statut 	1 	statut 	A 	1 	NULL 	NULL 	  	BTREE 	 
photos 	1 	immatriculation 	1 	immatriculation 	A 	9 	NULL 	NULL 	  	BTREE 	 
photos 	1 	appareil 	1 	appareil 	A 	9 	NULL 	NULL 	  	BTREE 	 
photos 	1 	id_unique 	1 	id_unique 	A 	9 	NULL 	NULL 	  	BTREE 	 
photos 	1 	version 	1 	version 	A 	9 	NULL 	NULL 	  	BTREE 	 
photos 	1 	proprietaire 	1 	proprietaire 	A 	9 	NULL 	NULL 	  	BTREE 	 
photos 	1 	lieu_aeroport 	1 	lieu_aeroport 	A 	3 	NULL 	NULL 	  	BTREE
J'ai aussi un index sur le "d.id" (membres.id) mais mySQL semble s'en moquer, il parcoure toute la table pour trouver le résultat.

Actuellement les tables sont peu remplies, les requêtes sont donc exécutées assez rapidement mais ça devrait assez rapidement se remplir et donc être plus lent...

Merci par avance pour votre aide à l'optimisation de cette requête !