首页 新闻 会员 周边 捐助

sql 优化

0
[已解决问题] 解决于 2014-02-20 09:14
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秒。请问有可以优化的地方吗?

一羽赐命的主页 一羽赐命 | 初学一级 | 园豆:11
提问于:2014-02-18 17:00
< >
分享
最佳答案
0

检查一下以下字段是否建立了索引:

A.number_id, B.dept_id, C.AssignDept, B.date

奖励园豆:5
dudu | 高人七级 |园豆:30585 | 2014-02-18 17:35
其他回答(1)
0

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

或者使用子查询将各表根据条件查出来后在连接

或者使用试图

听雨读诗 | 园豆:47 (初学一级) | 2014-02-19 09:25
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册