2010-10-13 4 views
0

Il s'agissait donc d'un petit site extrêmement populaire très rapidement et qui a maintenant de gros problèmes avec la requête sql ci-dessous. Je comprends que mon design DB n'est pas génial. J'ai le champ de texte pour subjects et programs qui contient un tableau sérialisé et je le recherche en utilisant like.Aide à l'optimisation/à la performance Mysql

La requête ci-dessous prend environ une minute.

SELECT p.*, e.institution 
FROM cv_personal p 
LEFT JOIN cv_education e 
ON  p.id = e.user_id 
LEFT JOIN cv_literacy l 
ON  p.id = l.user_id 
WHERE 1 = 1 
AND (e.qualification LIKE '%php%' OR e.subjects LIKE '%php%' OR l.programs LIKE '%php%') 
GROUP BY p.id 
ORDER BY p.created_on DESC 
+0

Lol. Merci pour votre question. Un exemple parfait pour ceux qui sont désireux de dire à un noob comment stocker des données sérialisées. –

Répondre

0

Qu'est-ce qu'un spectacle EXPLAIN? Je pense que vous pouvez ajouter des conditions à une jointure pour réduire le nombre de dossiers qui sont utilisés:

SELECT p.*, e.institution 
FROM cv_personal p 
LEFT JOIN cv_education e 
ON  (e.qualification LIKE '%php%' OR e.subjects LIKE '%php%') AND p.id = e.user_id 
LEFT JOIN cv_literacy l 
ON  l.programs LIKE '%php%' AND p.id = l.user_id 
ORDER BY p.created_on DESC 

Et pourquoi utilisez-vous GROUP BY?

+0

Les utilisateurs peuvent avoir de nombreux enregistrements éducatifs, donc j'utilise le groupe afin qu'il ne récupère qu'une seule ligne distincte. Si cela a du sens. ci-dessous est l'expliquer. http://typhon.svo.co.za/explain.jpg – Lylo

+0

Vous n'obtiendrez pas tous les documents éducatifs avec ce GROUP BY, un seul. Vous devez le supprimer et utiliser PHP pour afficher: http://stackoverflow.com/questions/3916164/how-separate-search-results-by-category-mysql-php/3916215#3916215 – MatTheCat

+0

Merci pour l'aide matthecat mais quand je Prenez le «groupe par» hors de la déclaration, il faut encore environ une minute. – Lylo