选择“最高”X 行而不进行排序

Posted

技术标签:

【中文标题】选择“最高”X 行而不进行排序【英文标题】:Selecting 'highest' X rows without sorting 【发布时间】:2011-03-29 15:31:13 【问题描述】:

我有一张包含大量数据的表格。让我们说 10GB 的行,包含一堆废话。例如,我需要选择具有最高 amount 列的 X 行(X 通常低于 10)。

有什么方法可以在不对整个表格进行排序的情况下做到这一点?对这么多数据进行排序非常耗时,我可以通过一次扫描整个表并选择 X 个最高值,让其余的保持不变。我正在使用 SQL Server。

【问题讨论】:

【参考方案1】:

amount 上创建一个索引,然后SQL Server 可以从中选择top 10 并进行书签查找以检索丢失的列。

【讨论】:

哇。谢谢。我没有意识到 Top N Sort 和 Sort 在执行计划上的区别,添加索引也有帮助。【参考方案2】:
SELECT TOP 10 Amount FROM myTable ORDER BY Amount DESC

如果它被索引,查询优化器应该使用索引。 如果没有,我看不出如何避免扫描整个事情......

索引是否有用取决于您进行搜索的频率。 您还可以考虑将该查询放入索引视图。我认为这将为您提供最佳的收益/成本比率。

【讨论】:

谢谢。可惜我不能同时接受这两个答案,但马丁是第一个。 如果时间真的很长,我会很好奇什么更有效:索引或索引视图。 索引视图只能在“更好”版本的 SQL Server 中使用,因此对我来说无法使用:-(

以上是关于选择“最高”X 行而不进行排序的主要内容,如果未能解决你的问题,请参考以下文章

无法单独选择行而不分组

JQuery UI Sortable + DataTables显示所有行而不刷新当前页面

如何删除文件中的重复行而不在 Unix 中对其进行排序

如何在单独的列中添加排序列名称,而不是在下拉列表中选择列来对表进行排序?

C++ 简单实现基数排序(list容器)

如何在熊猫时间序列中获得一个月的所有行而不考虑年份?