我想从一个表中选择100行,然后对这100行进行排序。此SQL:
select * from (select top 100 * from myTable) top100 order by myColumn速度非常慢,似乎是在对整个表进行排序,然后取前100名。
鉴于此SQL:
select top 100 from myTable 速度相当快
编辑:
第一个查询绝对是对整个表进行排序,然后选择前100个
我正在使用Sybase 15
发布于 2014-02-28 13:34:06
对慢查询的答案通常不是更改语法,而是查看表。在您的例子中,是在索引上。
两者之间的区别
select top 100 from myTable 和
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 ),在相当普通的硬件上,这将在几秒钟内处理数百万行。
发布于 2014-02-28 12:13:39
使用CTE:
例如:
;with mycte as
(
select top 100 from mytable
)select * from mycte order by 1 发布于 2014-02-28 12:07:01
也许你没有把ASC或DESC放进去?例如,在此代码中。
SELECT field1, field2,...fieldN table_name1, table_name2...ORDER BY field1, [field2...] [ASC [DESC]]https://stackoverflow.com/questions/22085923
复制相似问题