mysql 联表查询问题

hengfeng_su 发布于 2014/12/15 16:43
阅读 199
收藏 1

最近网站mysql数据库出现cpu跑满,导致网站挂掉的情况,查看日志,知道是由于列表联表查询慢的问题导致,早上并发量大,然后造成mysql锁表,mysql链接进程数超出最大连接数,出现了问题;

出问题的sql:

SELECT gs.id, gs.top_cat, gs.catid, gs.type, MIN(s.price) AS price, m.name, m.groupid FROM wtoip_yp_goods AS g LEFT JOIN wtoip_yp_goods_search AS gs ON g.id = gs.id LEFT JOIN wtoip_yp_goods_seed AS s ON s.gid = gs.id LEFT JOIN wtoip_member AS m ON m.userid = gs.userid LEFT JOIN wtoip_member_group AS mg ON m.groupid = mg.groupid WHERE gs.`top_cat` = 'T' AND gs.status = 1 AND gs.check_status <> 2 AND gs.overduetime > '1418607742' AND gs.`catid` LIKE '%;28%' AND gs.`areaid` = '3375' AND s.status = 1 GROUP BY s.gid ORDER BY g.sort DESC, mg.vip DESC, gs.updatetime DESC LIMIT 0, 40

单条执行的速度不慢,但是并发量有点大的时候,就出现问题,后来加了缓存来缓解压力,但是最终还是想优化一下sql解决问题,大家有什么方法可以优化这种多表联合查询慢的问题,随着数据量的不断增大,查询就越来越慢

以下是问题补充:

@hengfeng_su:各个条件用到的字段都相应做了索引 (2014/12/15 16:44)
加载中
0
红薯
红薯

在你的数据库上 EXPLAIN 一下这个 SQL 语句,然后再根据 EXPLAIN 的结果进行优化

0
hengfeng_su
hengfeng_su

explain后的结果,还算比较正常?

返回顶部
顶部