sql效率有关问题,请大神解惑
sql效率问题,请大神解惑!
表中共12W行数据
条件中去掉1=1 执行时间不到1秒
条件中加上1=1 执行时间6秒
表中没有建任何索引,请大神解惑
另外如何查看执行计划!
------解决思路----------------------
这就是,喜欢把1=1或者1=2带入SQL条件需要的代价
普遍认为,使用了“1=1”这样的过滤条件后数据库就无法使用索引等查询优化策略,数据库系统将会被迫对每行数据进行扫描以比较此行是否满足过滤条件,当表中的数据量非常大的时候效率会显得非常慢。因此如果数据检索对性能有比较高的要求就不要使用这种“简便”的方法进行检索
你把and()这整条件去掉,看下速度怎么样
------解决思路----------------------
ctrl+m,然后执行你的语句,就有一个图出现
------解决思路----------------------
刚才找了一个表测试了一下。
1、select * from 表 where 1=1 or id =834
用时14秒。
2、select * from 表 where id =834
用时不到1秒。
3、select * from 表 where 1=2 or id =834
用时不到1秒。
4、select * from 表 where 1=1 and id =834
用时不到1秒。
总结一下,如果是or,1=1对查询速度有很大影响,而1=2则没影响;如果是and,1=1对查询速度没多大影响。
and
(
1=1
or deptid in (select deptid from dbo.pub_getRoleUserAndDeptid('6,7') where st_id = 1)
or createDeptid in (select deptid from dbo.pub_getRoleUserAndDeptid('6,7') where st_id = 1)
)
表中共12W行数据
条件中去掉1=1 执行时间不到1秒
条件中加上1=1 执行时间6秒
表中没有建任何索引,请大神解惑
另外如何查看执行计划!
------解决思路----------------------
这就是,喜欢把1=1或者1=2带入SQL条件需要的代价
普遍认为,使用了“1=1”这样的过滤条件后数据库就无法使用索引等查询优化策略,数据库系统将会被迫对每行数据进行扫描以比较此行是否满足过滤条件,当表中的数据量非常大的时候效率会显得非常慢。因此如果数据检索对性能有比较高的要求就不要使用这种“简便”的方法进行检索
你把and()这整条件去掉,看下速度怎么样
------解决思路----------------------
ctrl+m,然后执行你的语句,就有一个图出现
------解决思路----------------------
刚才找了一个表测试了一下。
1、select * from 表 where 1=1 or id =834
用时14秒。
2、select * from 表 where id =834
用时不到1秒。
3、select * from 表 where 1=2 or id =834
用时不到1秒。
4、select * from 表 where 1=1 and id =834
用时不到1秒。
总结一下,如果是or,1=1对查询速度有很大影响,而1=2则没影响;如果是and,1=1对查询速度没多大影响。