SELECT count(*) FROM A left JOIN B ON A.number_id=B.id left JOIN C ON B.dept_id=C.id WHERE C.AssignDept ='001' AND B.date>='2013-01-01 00:00:00' AND B.date<='2014-01-01 23:59:59'
A表大约是30w数据,B表100w,C表只有30多条~~。执行速度差不多2~3秒。请问有可以优化的地方吗?
检查一下以下字段是否建立了索引:
A.number_id, B.dept_id, C.AssignDept, B.date
1、把限制条件放前面,先执行限制条件后会对表的压缩有帮助。毕竟限制条件是从左到右开始的。你这边的限制条件为:
C.AssignDept ='001'
2、使用Between 代替》= 《=
B.date between '2013-01-01 00:00:00' AND'2014-01-01 23:59:59'
综上:
select count(*) from A left join b on a.number_id=b.id and b.date between XXX left join c on XXXXX
或者使用子查询将各表根据条件查出来后在连接
或者使用试图