Forum dédié au moteur de recherche et aux techniques d'optimisation par #taggle
Vous n'�tes pas identifi�.
J'en appelle aux experts, j'ai des requetes SQL qui moulinnent gravement et je sais pas comment optimiser le bouzin pour que ca aille plus vite, elles sont du genre suivant :
$q = mysql_query("SELECT DISTINCT(a.`keyword`) FROM `lycos_results` as a,`tmp` as b WHERE a.`scanID`='$scanID' AND a.`datacenter`='$datacenter' AND a.`domain`='$domain' AND a.`keyword`=b.`keyword`"); $numberQueries = mysql_num_rows($q);
la table lycos_results a un peu plus de 600 000 lignes, la table temporaire tmp 1250 lignes.
cette requete doit prendre presque 3s et le cpu du kimsufi est a 99% la, j'ai 10 000 lignes a calculer de la sorte et plusieurs requetes de ce type a chaque fois donc c pas possible la, zavez une idee de comment je pourrais optimiser tout ca ? en lockant les tables ?
Hors ligne
Tu as essayé avec un index sur ton champs keyword?
Bienqu'il ne soit pas utilisé dans la clause Where, cela peut avoir une incidence sur le distinct.
Hors ligne
Les index oui, et tout a été calculé en 2 minutes !!!!
Merci à Malaiac qui m'a inspiré (merci aussi Vincent mais c trop tard eheh)
Hors ligne
WHERE a.`scanID`='$scanID' AND a.`datacenter`='$datacenter' AND a.`domain`='$domain' AND a.`keyword`=b.`keyword`");
Tu mets tous ces champs dans un seul, ca ne te fera qu'un seul 'and'. mais je ne pense pas que ce soit la meilleure solution
Sinon, tu peux faire le premier select sur la première table, puis créer une table temporaire avec le résultat, et piocher dans la seconde avec ta table 'temp'.
Enfin, tu devrais essayer avec les left join, pour la table temp. C'est probablement la meilleure solution.
Là, tu commences par construire une table temporaire de 600 000 x 1250 lignes, et ensuite seulement tu commences le tri. C'est pas le plus optimisé
Que donne une requète 'explain' ?
Hors ligne