易截截图软件、单文件、免安装、纯绿色、仅160KB

你知道多少关于sql select top N?

背景:
sql select top N 语句是一个非常重要的语句, 在实现分页查询中是不可或缺的. 由于分页查询通常涉及含有大量记录的表, 并且是为大量用户分享的任务,因此,对其进行优化是很有意义的。
实现sql top N 的功能有几种变种:
1. set rowcount @n; select ... order by somefields
2. select top (@n) .... order by somefields
3. select top (xx) ....   order by somefields
        -- 其中 xx是一个常数, 比如10
在上述的查询中引用的somefields, 如果涉及的表在其上有索引是一种情况, 没有索引又是一种情况。
有索引的话,即使表含有很多记录,也不会对性能造成太大问题。
没有索引的情况也是会有实际需求的,比如实时的找出销售最好的前100个产品。在没有索引时的查找Top N, 如果不进行细致的优化,会对性能造成很大的影响,甚至会使得整个系统瘫痪。
如果要对top n进行优化,那么了解sql server 是如何处理上述的top n 的几种变形就是很有必要的. 下面的文章是我在MS的论坛上发的, 我自己懒得翻译成中文了,和大家共享一下吧。
原文(是我在http://social.msdn.microsoft.com/Forums/en/transactsql/thread/944ad896-b34c-4dea-af55-cfbae79251f6上的一个回贴)
Question:
--fast
1. select top 100 * from test where c1 < 30000 order by c2
--slow
2. select top 101 * from test where c1 < 30000 order by c2
1. is more than  two times faster than 2.
Why?
What a coinccident! I am on the same issue just at the time.
I was considering implementing an algorithm like this:
First populate the N rows to a table variable (with index on the sort column), then iterate through all left rows, adding one row to the table variable if bigger than min of the table, else discard it.  This could be either done in sql or clr aggregate function.
Then I thought maybe MS had already done it in the Top N stuff, so started to run a test against it.
CREATE TABLE [dbo].[NUM]
([n] int NOT NULL, s varchar(128) NULL, PRIMARY KEY CLUSTERED([n] ASC))
go
-- populate data
set nocount on
declare @n int, @i int
set @n=1000000
set @i = 0
while @n>0 begin
if @i = 0 begin tran
insert


相关文档:

sql 2005 存储过程分页 java 代码

 create PROCEDURE pagelist
@tablename nvarchar(50),
@fieldname nvarchar(50)='*',         
@pagesize int output,--每页显示记录条数
@currentpage int output,--第几页
@orderid nvarchar(50),--主键排序
@sort int,--排序方式,1表示升序,0表示降序排列 ......

SQL Server的链接服务器技术小结

一、使用 Microsoft OLE DB Provider For ODBC 链接MySQL
安装MySQL的ODBC驱动MyODBC
1、为MySQL建立一个ODBC系统数据源,例如:选择数据库为test ,数据源名称为
myDSN
2、建立链接数据库
EXEC sp_addlinkedserver  @server = 'MySQLTest', @srvproduct='MySQL',
@provider = 'MSDASQL', @datasrc = 'myDSN'
......

SQL语句优化技术分析

SQL语句优化技术分析
翻译:Jerry [2005-11-11]
原文出处:http://www.51testing.com
原文作者:不详
转载请注明:来自Sawin系统分析之窗
操作符优化
IN 操作符
用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格。
但是用IN的SQL性能总是比较低的,从ORACLE执行的步骤来分析用I ......

实现远程连接SQL Server2005


首先配置SQLSERVER2005:
打开”Microsoft SQL Server Management Studio“直接用Windows 用户连接进入,再在“安全性”中的“登录名”内的“新建登录名”,你就对应的添好“确定”就可以了。
 
再在你对应的“数据库”里“安全性&r ......

给mysql添加一个管理员的SQL语句

insert into mysql.user
SELECT '%', 'admin', PASSWORD('admin'), Select_priv, Insert_priv, Update_priv,
 Delete_priv, Create_priv, Drop_priv, Reload_priv,
 Shutdown_priv,  Process_priv, File_priv, Grant_priv, References_priv,
 Index_priv, Alter_priv, Show_db_priv, Super_priv, ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号