=================从5.5秒查询到0.19秒,提升26倍速度=======================
新接手的一个项目,很多地方速度超慢需要改
这里有一个问题就是,从一张记录表中 选择会员号不同,且同一会员号中id最大的 全部数据 然后和其他2张表联合查询出来
标准版的数据库去重问题
原来的SQL是这样的
SELECT *
FROM member M
LEFT JOIN
(select *
from member_source_recode
where id in
(select max(id)
from member_source_recode
group by member_id)) MSR
ON M.ID=MSR.MEMBER_ID
LEFT JOIN v_makecard vmc
on vmc.oneSectorOnePiece=M.member_code
WHERE 1=1
后面还跟了不少表2表1的条件查询
不带条件查询时间5.5秒,贼慢,这种方案是不现实,需要优化
一开始我以为问题出在子查询中 in语句大大的拖了后腿,然后进行一下联合查询测试
SELECT *
FROM member M
LEFT JOIN member_source_recode MSR
ON M.ID=MSR.MEMBER_ID
LEFT JOIN v_makecard vmc
on vmc.oneSectorOnePiece=M.member_code
WHERE 1=1
结果,查询时间4.1秒,原来最大的元凶在这
=================整改开始==================
1.在关联的表外面加上SELECT,关联上SELECT出来的结果
SELECT *
FROM member M
LEFT JOIN (SELECT * FROM member_source_recode) MSR
ON M.ID=MSR.MEMBER_ID
LEFT JOIN (SELECT * FROM v_makecard) vmc
on vmc.oneSectorOnePiece=M.member_code
WHERE 1=1