易截截图软件、单文件、免安装、纯绿色、仅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


相关文档:

join 和 Union和SQL Union All 的区别


SQL UNION 操作符
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
SQL UNION 语法
SELECT column_name(s) from table_name1
UNION
SELECT column_name(s) from table_na ......

SQL中文问排序

SQL中文问排序
    首先把这些信息在editplus中,转换为一列,拷贝到excel中,拷贝后记着在第一行前插入一行,作为列标头,例如为name,然后在sql中表中,导入数据,生成一个新表,例如fenlei,打开sql语句行,执行:
SELECT *
from Fenlei
ORDER BY name COLLATE Chinese_PRC_CS_AS_KS_WS
......

实现远程连接SQL Server2005


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

PL SQL中复制出的中文乱码

之前使用PLSQL,都是以写入内容为主,写入中文内容偶有乱码,但是只在显示上并未影响存取,所以没有在意。
今天在修改一个视图时,需要将修改内容记录下来,so,想写个修改记录,就把视图内容拷贝了出现,发现拷贝出现的中文内容出现乱码。
并未完全在意,以为只要原样放回plsql就会好的,但是保存再取出放到plsql中发现仍 ......

sql分组查询问题

情景一:
表中数据
name  score
 aaa   11
 aaa   19
 bbb   12
 bbb   18
 ccc   19
 ddd   21
期望查询结果如下
name   score
 aaa     30
 bbb    ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号