Mysql性能/优化帮助
因此,这是一个非常快速的非常流行的小型网站,现在和即时通讯有以下sql查询的主要问题。Mysql性能/优化帮助
我明白我的数据库设计不是很好。我有文本字段subjects
和programs
女巫包含一个序列化数组,我使用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
什么是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?
用户可以拥有许多教育记录,因此我使用该组,因此它只检索一个不同的行。如果那有意义的话。下面是 的解释。 http://typhon.svo.co.za/explain.jpg – Lylo 2010-10-13 07:50:09
您不能通过此GROUP BY获取所有教育记录,只有一个。你应该删除它,并使用PHP来显示:http://*.com/questions/3916164/how-separate-search-results-by-category-mysql-php/3916215#3916215 – MatTheCat 2010-10-13 07:54:30
感谢您的帮助matthecat,但是当我从声明中剔除“分组”,仍然需要一分钟左右的时间。 – Lylo 2010-10-13 08:02:03
大声笑。谢谢你的问题。对于那些急于告诉noob如何存储序列化数据的人来说,这是一个很好的例子。 – 2010-10-13 08:24:04