MySQL left join 查询分析
今天网站有人反馈很卡。我赶紧查询数据库SQL执行情况,因为之前运维给到有我们项目堆积了很多SQL慢查询,通过执行
mysql> show full processlit;
发现有多条这样一条SQL语句
SELECT
COUNT(*) AS `rows`
FROM
`Customer` AS `a`
LEFT JOIN
(SELECT * FROM `CustomerFollowUp` WHERE `groupId`=14) AS `cfu`
ON
`cfu`.`customerId`=`a`.`id`
WHERE
1=1 AND `a`.`id`>0;
我单独执行,用了0.863 秒
Customer 和 CustomerFollowUp是一对多的关系
后来修改了一下
SELECT
COUNT(*) AS `rows`
FROM
`Customer` AS `a`
LEFT JOIN
`CustomerFollowUp` AS `cfu`
ON
`cfu`.`customerId`=`a`.`id`
WHERE
1=1 AND `a`.`id`>0 AND `cfu`.`groupId`=14;
查询时间0.189 秒
但修改过的SQL,查询结果和原SQL结果可能是不一致的。
再次优化SQL
SELECT
COUNT AS `rows`
FROM
`Customer` AS `a`
LEFT JOIN
`CustomerFollowUp` AS `cfu`
ON
`cfu`.`customerId`=`a`.`id` AND `cfu`.`groupId`=14
WHERE
1=1 AND `a`.`id`>0;
执行时间0.186 秒
和最初SQL查询结果一致