sql server 2005查询范围越小越慢

[复制链接]
查看11 | 回复3 | 2009-11-12 11:58:39 | 显示全部楼层 |阅读模式
你用的是IN?(后面条件)如果存在大量数据的话,用EXISTS会好很多,如果(后面条件数量少),用IN快。 用exists范围小会更慢,范围小用IN,范围大用exists
回复

使用道具 举报

千问 | 2009-11-12 11:58:39 | 显示全部楼层
这种情况和sqlserver优化利用的索引有关。在你的sql语句中,应该是有多个索引字段,而且其中一个索引是时间。当时间范围较大时(示例中的1月1日到10月31日),sqlserver认为时间范围较大,采用了其他索引字段,而恰巧这个索引在本次查询效率较高。当时间范围缩小时(示例中的10月1日到10月31日),sqlserver认为时间范围较小,采用了时间索引字段,而恰巧时间索引在本次查询效率较慢。如果你的sql加上强制使用其他索引,就能发现,即使缩小时间范围,也没有问题:select * from [table_name] with (NoLock,Index = [index_name]) where ......-----by 谊信 www.shyxit.com
回复

使用道具 举报

千问 | 2009-11-12 11:58:39 | 显示全部楼层
记住 千万不要用in或者not in效率忒低
回复

使用道具 举报

千问 | 2009-11-12 11:58:39 | 显示全部楼层
是不是所有记录都在1月1日到10月31日之间
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行