首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何选择N行并对其进行排序?

问如何选择N行并对其进行排序?
EN

Stack Overflow用户
提问于 2014-02-28 12:01:28
回答 3查看 185关注 0票数 1

我想从一个表中选择100行,然后对这100行进行排序。此SQL:

代码语言:javascript
复制
select * from (select top 100 * from myTable) top100 order by myColumn

速度非常慢,似乎是在对整个表进行排序,然后取前100名。

鉴于此SQL:

代码语言:javascript
复制
select top 100 from myTable 

速度相当快

编辑:

第一个查询绝对是对整个表进行排序,然后选择前100个

我正在使用Sybase 15

EN

回答 3

Stack Overflow用户

发布于 2014-02-28 13:34:06

对慢查询的答案通常不是更改语法,而是查看表。在您的例子中,是在索引上。

两者之间的区别

代码语言:javascript
复制
select top 100 from myTable 

和

代码语言:javascript
复制
select top 100 from myTable order by myRow -- (really?  myRow?  Not myColumn?) 

第一个查询是没有意义的。表没有顺序,所以"top“100实际上表示任意的100。不确定你能不能卖给凯西·卡西姆。

比非标准top更好,produce a real ranking通过将表连接到自身来实现,并使用WHERE myRow <= 100限制输出。

确保有一个以myRow作为第一列的索引。索引列的查找复杂度为O(log ),在相当普通的硬件上,这将在几秒钟内处理数百万行。

票数 0
EN

Stack Overflow用户

发布于 2014-02-28 12:13:39

使用CTE:

例如:

代码语言:javascript
复制
;with mycte as   
(  
select top 100 from mytable  
)select * from mycte order by 1  
票数 -1
EN

Stack Overflow用户

发布于 2014-02-28 12:07:01

也许你没有把ASC或DESC放进去?例如,在此代码中。

代码语言:javascript
复制
SELECT field1, field2,...fieldN table_name1, table_name2...ORDER BY field1, [field2...] [ASC [DESC]]
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22085923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档