我想从表中选择100行,然后命令这100行。这个SQL:
select * from (select top 100 * from myTable) top100 order by myColumn
非常慢,似乎是在整个桌子上排序然后进入前100名。
这个SQL:
select top 100 from myTable
非常快
编辑:
第一个查询肯定是对整个表进行排序,然后选择前100个
我正在使用Sybase 15
答案 0 :(得分:0)
慢查询的答案通常不是改变语法,而是查看表格。在你的情况下,在索引。
之间的区别
select top 100 from myTable
和
select top 100 from myTable order by myRow -- (really? myRow? Not myColumn?)
是第一个查询没有意义。表没有订单,所以“top”100真的意味着任何 100.不确定你是否可以将它卖给Casey Kasem。
优于非标准top
,produce 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]]