文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>SQL SERVER中 ORDER BY也会偷懒

SQL SERVER中 ORDER BY也会偷懒

时间:2011-05-24  来源:生产力

当使用TOP N(不加ORDER BY)时,SQLSERVER不会对数据做任何分析,到了N个直接截断。

但如果你加上ORDER BY,也不一定会进行排序,因为SQLSERVER只在你WHERE子句限制的字段的值是不唯一的情况下排序。

我举个例:比如你有一个表如下:

名字   工资     ID

张三    500     0

李四    600     1

赵五    700     2

孙六    700     3

田七    700     4

王八    800     5

如果SQL语句是:

SELECT TOP 2 *

FROM 表名

WHERE 工资=700

则出来的结果是:

名字   工资     ID

赵五    700     2

孙六    700     3

若SQL换成:

SELECT TOP 2 *

FROM 表名

WHERE 工资=700

ORDER BY 工资 DESC

本以为这次孙六要排在赵五前面了,

结果查询出来的结果没有变化,

看了下执行计划:

发现根本没进行排序操作。

原来SQLSERVER也会偷懒,

发现WHERE子句中约束字段的值一样时,就跳过了排序!

为了进行验证,我又写了这样两句SQL:

SQL1:

SELECT TOP 4 *

FROM 表名

WHERE 工资>=700

查询结果是:

名字   工资     ID

赵五    700     2

孙六    700     3

田七    700     4

王八    800     5

SQL2:

SELECT TOP 4 *

FROM 表名

WHERE 工资>=700

ORDER BY 工资 DESC

查询结果是:

名字   工资     ID

王八    800     5

田七    700     4

孙六    700     3

赵五    700     2

 

很明显,赵五,孙六,田七都进行了倒叙。

(技术文章好难写,一个意思想到了却难以表达清楚真让人抓狂。唉,估计现在也有人没看懂,我表达能力不行啊)

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载