在查询过程中,一般是用 select top 20 * from a where ID not in (select top 20 Id from a) 的方式进行筛选、查询。这样在数据量少的时候没什么问题,如果在数据量达到上千万的时候,将非常慢!该用什么语句些才能是查询速度增快呢?
一般不会让数据库一张表的数据上千万
建议使用表变量先缓存部分查询结果,这样比起not in 要好一些。
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) 功能不错。
exists 可以实现同样的功能,但是效率上也没有特别大的差别。
这是园子里的一个关于它的文章。
http://www.cnblogs.com/zwl12549/archive/2007/04/19/720028.html