如何选择N行然后对它们进行排序?

时间:2014-02-28 04:01:28

标签: sql sybase sybase-ase

我想从表中选择100行,然后命令这100行。这个SQL:

select * from (select top 100 * from myTable) top100 order by myColumn

非常慢,似乎是在整个桌子上排序然后进入前100名。

这个SQL:

select top 100 from myTable 

非常快

编辑:

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

我正在使用Sybase 15

3 个答案:

答案 0 :(得分:0)

慢查询的答案通常不是改变语法,而是查看表格。在你的情况下,在索引。

之间的区别
select top 100 from myTable 

select top 100 from myTable order by myRow -- (really?  myRow?  Not myColumn?) 

是第一个查询没有意义。表没有订单,所以“top”100真的意味着任何 100.不确定你是否可以将它卖给Casey Kasem。

优于非标准topproduce a real ranking,方法是将表格连接到自身,并使用WHERE myRow <= 100限制输出。

确保第一列有myRow的索引。索引列的查找复杂度为 O(log n),它将在相当普通的硬件上以秒为单位回答数百万行。

答案 1 :(得分:-1)

使用CTE:

EX:

;with mycte as   
(  
select top 100 from mytable  
)select * from mycte order by 1  

答案 2 :(得分:-2)

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

SELECT field1, field2,...fieldN table_name1, table_name2...ORDER BY field1, [field2...] [ASC [DESC]]