select count(*)两表关联时,这两个表都有100万数据,非常慢

chenzhanpeng 2016-09-19 09:54:46
select count(*) from lg_mailorder m left join sc_sale_trade t on m.tradeid=t.id where m.enterpriseid='KH' AND m.status=1 AND m.deleteflag=0 AND t.truckType=2

单表count就快
两表count非常慢,要30秒
100万数据
求解决方案
谢谢
...全文
4353 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
道素 2016-12-02
  • 打赏
  • 举报
回复
你看看执行计划, https://www.brentozar.com/pastetheplan/?id=S1STitBzg 将执行计划的XML 贴到上面网址,有助于大家帮你分析
道素 2016-12-02
  • 打赏
  • 举报
回复
说点题外的。 如果在搜索条件中增加了left join 右表的条件,这时两个表返回的数据其实已经是inner join的结果额 比如t.truckType=2就暗含 t表的记录不能为空得约束
薛定谔的DBA 2016-12-02
  • 打赏
  • 举报
回复
如果加上这个条件 AND t.truckType=2 ,改为inner join 方式连接表。
CalvinR 2016-12-01
  • 打赏
  • 举报
回复
关键条件上加索引
zbdzjx 2016-10-09
  • 打赏
  • 举报
回复
sql server自带“Database Engine Tuning Advisor”,把SQL语句放到里面,会自动优化,提示需要建哪些索引。
道素 2016-10-09
  • 打赏
  • 举报
回复
引用 楼主 chenzhanpeng 的回复:
select count(*) from lg_mailorder m left join sc_sale_trade t on m.tradeid=t.id where m.enterpriseid='KH' AND m.status=1 AND m.deleteflag=0 AND t.truckType=2 单表count就快 两表count非常慢,要30秒 100万数据 求解决方案 谢谢
画外题: t.truckType=2放在Where中,两个表实际上是INNER JOIN链接了,因为这里暗含了t不能为空
tcmakebest 2016-10-08
  • 打赏
  • 举报
回复
没有数据无法测试,只能提点看法: count(*) 加 left join 感觉怪怪的. left join 加 where 条件中的 t.truckType=2 到底是哪个意思, 为什么不放到 on 里面去
mingqing6364 2016-10-08
  • 打赏
  • 举报
回复
SELECT
	COUNT (*),
	t.truckType
FROM
	lg_mailorder m
LEFT JOIN sc_sale_trade t ON m.tradeid = t.id
WHERE
	m.enterpriseid = 'KH'
AND m.status = 1
AND m.deleteflag = 0
GROUP BY t.truckType
HAVING t.truckType = 2
试试这样效率有提升没有,我的一个猜测,没有实际测试
不吃肉的狮子 2016-10-08
  • 打赏
  • 举报
回复
用count(1) 替换 count (*)
云中客 2016-09-27
  • 打赏
  • 举报
回复
关注解决!!
chenzhanpeng 2016-09-19
  • 打赏
  • 举报
回复
回复下各位: select count(*) from lg_mailorder m left join sc_sale_trade t on m.tradeid=t.id where m.enterpriseid='KH' AND m.status=1 AND m.deleteflag=0 AND t.truckType=2 如果把 AND t.truckType=2去掉就很快,如果没去,就不走联合索引 t.truckType是第二个表的索引 这种情况怎么办
anythingBlank 2016-09-19
  • 打赏
  • 举报
回复
查下联合索引 仔细看下 ='' like'%%' 这种的
lbh119 2016-09-19
  • 打赏
  • 举报
回复
结果级是100万数据量,还是这两个表都是100w,相关字段有索引不? select count(*) from lg_mailorder m left join sc_sale_trade t on m.tradeid=t.id AND t.truckType=2 where m.enterpriseid='KH' AND m.status=1 AND m.deleteflag=0
中国风 2016-09-19
  • 打赏
  • 举报
回复
在条件列建上索引

11,850

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 非技术版
社区管理员
  • 非技术版社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧