项目中有需要,使用MySQL的in子查询,查询符合in子查询集合中条件的数据,但是没想到的是,MySQL的in子查询会如此的慢,让人无法接收,于是上网搜索解决办法,下面记录下:
一、原始in子查询
SELECT * FROM basic_zdjbxx WHERE suiji IN ( SELECT zdcode FROM basic_h WHERE zdcode != "" )
该查询语句居然耗时45秒左右的时间,实在无法接收
子查询: SELECT zdcode FROM basic_h WHERE zdcode != "" 只需要约0.05秒查询时间
将子查询结果放到in中,查询语句瞬间出结果
分析如下:
二、解决方法如下:
(1)仍使用in子查询,多查询一次
SELECT * FROM basic_zdjbxx WHERE suiji IN ( SELECT zdcode FROM ( SELECT zdcode FROM basic_h WHERE zdcode != "" ) AS h )
查询速度非常快,毫无延迟
上面的语句只是对in子查询又做了一次查询
分析如下:
(2)使用LEFT JOIN
SELECT zd.* FROM ( SELECT DISTINCT zdcode FROM basic_h WHERE zdcode != "" ) AS h LEFT JOIN basic_zdjbxx zd ON zd.suiji = h.zdcode
查询速度也非常快,毫无延迟
分析如下:
如有更好的的解决方法,请留言告之,谢谢!
让我们一起遨游在代码的海洋里!