首页 新闻 会员 周边 捐助

比 not in 还要高效的查询语句

0
[已关闭问题] 关闭于 2009-09-24 14:20

在查询过程中,一般是用 select top 20 * from a where ID not in (select top 20 Id from a) 的方式进行筛选、查询。这样在数据量少的时候没什么问题,如果在数据量达到上千万的时候,将非常慢!该用什么语句些才能是查询速度增快呢?

会飞的剑的主页 会飞的剑 | 菜鸟二级 | 园豆:205
提问于:2009-09-18 17:15
< >
分享
所有回答(4)
0

一般不会让数据库一张表的数据上千万

小眼睛老鼠 | 园豆:2731 (老鸟四级) | 2009-09-18 17:33
0

建议使用表变量先缓存部分查询结果,这样比起not in 要好一些。

邀月 | 园豆:25475 (高人七级) | 2009-09-18 18:15
这样也不是很有效,效果不大
支持(0) 反对(0) 会飞的剑 | 园豆:205 (菜鸟二级) | 2009-09-18 18:17
0

SELECT *
FROM (select *,ROW_NUMBER() Over(order by id) as rowNum from table_info ) as myTable
where rowNum between 50 and 60;

用SQL 2005的ROW_NUMBER() Over(XXX) 功能不错。

winzheng | 园豆:8797 (大侠五级) | 2009-09-18 19:01
这个我用上去好像好不行呢!而且我的查询还有关联其他表,有多表查询! 不过还是谢谢啦,我再看看行不行!^_^
支持(0) 反对(0) 会飞的剑 | 园豆:205 (菜鸟二级) | 2009-09-22 17:28
0

exists 可以实现同样的功能,但是效率上也没有特别大的差别。

这是园子里的一个关于它的文章。

http://www.cnblogs.com/zwl12549/archive/2007/04/19/720028.html

邢少 | 园豆:10926 (专家六级) | 2009-09-21 15:24
恩! 谢谢啦!我去看看!
支持(0) 反对(0) 会飞的剑 | 园豆:205 (菜鸟二级) | 2009-09-22 17:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册