查询语句超慢问题的一种解决办法

昨天同事碰到一个怪异的问题,DAO里的一个简单查询方法在数据量为2000万左右的表中执行要花十几秒的时间,而在数据量小一些的表中则执行时间正常。这个问题乍一看明显是无索引或查询语句有问题,但对相应的表结构等查看了下,发现查询条件已经存在索引,而且同一个表,其它的方法执行速度是没问题的,把程序执行的SQL语言拷贝到sqlserver2008查询分析器中执行,也很快,这个就是问题的现象,试过换环境,换方法的执行地方,都如此。
下面是找了很久找到的问题,在查询语句的条件中,将查询条件
where column1='abc'
改为
 where column1 is not null and column1='abc'
后,查询速度马上提高,基本不用等待。经过大家的分析,问题为sqlserver 表中字段如果为空,那么这个字段的索引对这条数据是没有效果的,而今天发现问题的那张表刚好有个查询条件建索引了,单这个字段有一半左右的数据都为空,所以索引无效了;而SqlServer本身的查询分析器会自动对空值进行过滤,所以查询会很快,这也就是同样的SQL语句在程序中和直接在SqlServer中运行时间差别大的原因了,至此问题清楚了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值