J'ai la requête suivante :

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
 
 
SELECT DISTINCT p.products_id, p.manufacturers_id, p.products_subimage5, 
pd.products_price, pd.products_name, 
p.products_style, m.manufacturers_name 
FROM products p
JOIN products_stock st ON (p.products_id=st.products_id)  
JOIN products_description pd ON (p.products_id=pd.products_id) 
JOIN products_tribu pt ON (p.products_id=pt.products)  
JOIN manufacturers m ON (p.manufacturers_id=m.manufacturers_id) 
WHERE p.products_status = '1' 
AND st.products_stock_quantity > '0' 
AND pd.language_id = '1' 
AND p.marque='10' 
AND pt.tribu='2'  
ORDER BY p.products_ordered DESC LIMIT 48,12
Cette requête va très souvent être appelée. Il faut qu'elle soit le plus performante possible.

J'ai essayé de créer des vues pour la rendre plus rapide, mais ça n'a rien donné. J'ai également essayer d'utiliser des tables de type "MEMORY", mais les temps sont plus longs.

J'ai également essayé de mettre des index, et parfois cela fonctionne, parfois non. J'ai quand même gagné pas mal de vitesse en mettant un index sur la table products_tribu sur le champ products_id et tribu_id.

Je voudrais savoir s'il existe déjà une manière SQL d'optimiser cette requête. D'autre part, j'aimerais savoir si vous avez des conseils concernant les index pour cet exemple précis.
J'ai déjà lu le dossier sur l'optimisation, mais j'aimerais savoir s'il y a des choses à faire sur cette requête précisemment.

Sinon, existe-il des systèmes de cache ou de mémoire permettant de booster un peu les perfs de ma base de données?

Merci!