sqlserver left join on where 查询的速度在数据量较大的情况下非常的慢,求解决,求大神

niuzaiwenjie 2014-11-19 10:50:17
sqlserver left join on where 查询的速度在数据量较大的情况下非常的慢,求解决,求大神
select count(*)  from user_Work_Enroll a LEFT JOIN user_Login b on a.cusername=b.cusername  where  b.sUnitID='4101000000000000'

这是默认加载的时候需要显示的数据分页总数,后面还会有很多需要选择的条件,都会以此列出在where 之后,


我只是想查询2个表联合后的总页数,加上where 条件后,速度很慢,左边数据超百万,右表数据较少,100万数据,默认情况下需要10s 速度太慢了,求高人给指点优化方案
...全文
1883 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
在路上_- 2014-11-19
  • 打赏
  • 举报
回复
left join 是不是不影响总页数呀?去掉 left join 查总页数试试
Yole 2014-11-19
  • 打赏
  • 举报
回复
100w数据要10秒,是不是缺少索引啊~~~ 加上索引试试呢~
Tiger_Zhao 2014-11-19
  • 打赏
  • 举报
回复
这是外键设计有问题。
a、b 要用 userid 而不是 username 进行关联。
用 userid 建索引容量小、查询快。
--小F-- 2014-11-19
  • 打赏
  • 举报
回复
cusername有索引吗? sUnitID也可以加索引
还在加载中灬 2014-11-19
  • 打赏
  • 举报
回复
select SUM(1)from user_Work_Enroll a
	LEFT JOIN user_Login b on a.cusername=b.cusername
where  b.sUnitID='4101000000000000'
--或者
select COUNT(a.主键)from user_Work_Enroll a
	LEFT JOIN user_Login b on a.cusername=b.cusername
where  b.sUnitID='4101000000000000'
--然后看下,能不能用主键的字段来做表连接的字段
--如果不行,给cusername加个索引试下
niuzaiwenjie 2014-11-19
  • 打赏
  • 举报
回复
引用 6 楼 sz_haitao 的回复:
a、b都对cusername建了索引吗? 能利用索引,才能快
这个没有索引,我加索引试试,谢谢
niuzaiwenjie 2014-11-19
  • 打赏
  • 举报
回复
引用 7 楼 roy_88 的回复:
楼主的语句应该用INNER JOIN 而不时LEFT JOIN 在条件列建上索引只取记录,百万级数据1秒应该可以出来
因为这是以前公司的老数据,程序也是比较老的,应该是没有建立索引,表结构也是有问题,但表结构也没有办法更改了吧,我先建立索引试试
niuzaiwenjie 2014-11-19
  • 打赏
  • 举报
回复
引用 5 楼 xxzxwsx 的回复:
left join 是不是不影响总页数呀?去掉 left join 查总页数试试
是不影响总页数,但如果去掉,再加个选择条件就会不对了
中国风 2014-11-19
  • 打赏
  • 举报
回复
楼主的语句应该用INNER JOIN 而不时LEFT JOIN 在条件列建上索引只取记录,百万级数据1秒应该可以出来
haitao 2014-11-19
  • 打赏
  • 举报
回复
a、b都对cusername建了索引吗? 能利用索引,才能快

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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