2010-10-13 77 views
0

因此,這是一個非常快速的非常流行的小型網站,現在和即時通訊有以下sql查詢的主要問題。Mysql性能/優化幫助

我明白我的數據庫設計不是很好。我有文本字段subjectsprograms女巫包含一個序列化數組,我使用like進行搜索。

以下查詢大概需要一分鐘。

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

大聲笑。謝謝你的問題。對於那些急於告訴noob如何存儲序列化數據的人來說,這是一個很好的例子。 – 2010-10-13 08:24:04

回答

0

什麼是EXPLAIN顯示? 我想你可以添加條件爲連接,以減少其使用的記錄數:

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 

你們爲什麼使用GROUP BY?

+0

用戶可以擁有許多教育記錄,因此我使用該組,因此它只檢索一個不同的行。如果那有意義的話。下面是 的解釋。 http://typhon.svo.co.za/explain.jpg – Lylo 2010-10-13 07:50:09

+0

您不能通過此GROUP BY獲取所有教育記錄,只有一個。你應該刪除它,並使用PHP來顯示:http://stackoverflow.com/questions/3916164/how-separate-search-results-by-category-mysql-php/3916215#3916215 – MatTheCat 2010-10-13 07:54:30

+0

感謝您的幫助matthecat,但是當我從聲明中剔除「分組」,仍然需要一分鐘左右的時間。 – Lylo 2010-10-13 08:02:03