选择“最高”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显示所有行而不刷新当前页面