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 速度太慢了,求高人给指点优化方案
------解决思路----------------------
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加个索引试下
------解决思路----------------------
cusername有索引吗?
sUnitID也可以加索引
------解决思路----------------------
这是外键设计有问题。
a、b 要用 userid 而不是 username 进行关联。
用 userid 建索引容量小、查询快。
------解决思路----------------------
100w数据要10秒,是不是缺少索引啊~~~
加上索引试试呢~
------解决思路----------------------
a、b都对cusername建了索引吗?
能利用索引,才能快
------解决思路----------------------
楼主的语句应该用INNER JOIN 而不时LEFT JOIN
在条件列建上索引只取记录,百万级数据1秒应该可以出来