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

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

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

【问题讨论】:

    标签: sql sql-server tsql query-optimization


    【解决方案1】:

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

    【讨论】:

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

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

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

    【讨论】:

    • 谢谢。可惜我不能同时接受这两个答案,但马丁是第一个。
    • 如果时间真的很长,我会很好奇什么更有效:索引或索引视图。
    • 索引视图只能在“更好”版本的 SQL Server 中使用,因此对我来说无法使用:-(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-12
    • 2013-11-06
    • 1970-01-01
    • 2020-04-02
    • 2015-05-19
    相关资源
    最近更新 更多