Mysql性能/优化帮助

问题描述:

因此,这是一个非常快速的非常流行的小型网站,现在和即时通讯有以下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

什么是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://*.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