当前位置: 首页 > 图文教程 > 数据库 > MSSQL > TOPN 子句与SET ROWCOUNTN 之对比

MSSQL
SQL Server数据库技术(122)
SQL Server数据库技术(123)
SQL Server数据库技术(124)
SQL Server数据库技术(125)
SQL Server数据库技术(126)
SQL Server数据库技术(127)
SQL Server数据库技术(128)
SQL Server数据库技术(129)
SQL 语法参考手册
存储过程编写经验和优化措施
Sql Server实用操作小技巧集合
更改数据库中表的所属用户的两个方法
SQL SERVER中直接循环写入数据
无数据库日志文件恢复数据库方法两则
维护Sql Server中表的索引
Sql Server全文搜索中文出错的问题
利用数据库日志恢复数据到时间点的操作
SQL Server2000数据库文件损坏时如何恢复
MySQL和SQL Server,到底选择谁?
SQL特性汇总表

MSSQL 中的 TOPN 子句与SET ROWCOUNTN 之对比


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 115 ::
收藏到网摘: n/a

 

问:为了从查询中返回指定数量的行,使用 TOPN 子句比使用SET ROWCOUNTN 语句要快吗?

答:在正确进行了索引的情况下,TOP N 子句和SET ROWCOUNT N 语句是一样快的,但是如果数据未经过排序,TOP N 要快一些。在输入未排序的情况下,TOP N 操作时使用一个经过排序的小的中间临时表,而且操作时仅仅替换该表的最后一行。如果输入是近似排序的,TOP N 引擎必须删除或插入最后行,但只需几次操作即可。近似排序意味着您正在处理的堆集在初始构建时可进行有序的插入操作,并且不需要进行很多的更新、删除、向前移动指针等操作。

排序一个近似排序的堆集比排序一个巨大的表要更有效率。在一次测试中,使用TOP N 来对一个由无序插入操作构建的并且含有同样的行数的表进行排序,发现TOP N 的效率也不高。通常,在进行过索引和未进行过索引的情况下,I/O时间都是一样的;但是如果没有进行过索引,SQL Server 必须要进行一次全表扫描。处理器时间和实耗时间说明近似排序的堆集要更有效率一些。但I/O时间是相同的,因为不管怎样SQL Server都要读取所有的行。