使用日期索引优化ROW_NUMBER()

彼得

我有这个简单的查询,希望可以很不言自明。

SELECT ROW_NUMBER() OVER (PARTITION BY Price_Id ORDER BY date DESC) r, *  FROM Samples

我的问题是我有超过80000条记录,执行该查询大约需要3秒钟。我的问题是我是否可以做些什么来提高性能?

我正在考虑一个索引,并提出了类似

CREATE INDEX IX_Samples_Date ON Samples (Date DESC)

但是我必须承认我以前从未使用过索引,而上面的尝试也没有用。

米凯尔·埃里克森(Mikael Eriksson)

您需要一个POC索引。看看SQL Server 2012索引指南部分:如何编写T-SQL窗口函数,第3部分

因此,在您的情况下,您需要将其Price_Id作为索引的第一列。

create index IX_Samples_POC on dbo.Samples(Price_Id, date desc);

但是即使有了索引,也无法保证SQL Server会使用它。您正在查询所有行和所有列,因此很可能无论如何都会得到聚集索引扫描或表扫描,因为您可能没有将所有其他列都包含在索引中(聚集键自动包含在内)。

如果您row_number在派生表中使用索引并将结果重新连接到获取其余列的表,则取决于表结构,使用索引可能会得到更快的计划

假设您有一个主键ID也是集群键,则类似这样。

select S.*,
       T.r
from Samples as S
  inner join (
             select ID,
                    row_number() over(partition by Price_Id 
                                        order by date desc) as r
             from dbo.Samples
             ) as T
    on S.ID = T.ID;

另一种选择是在索引中包含所需的列。如果您实际上需要所有列,则可能不是一个好主意。

create index IX_Samples_POC on dbo.Samples(Price_Id, date desc) 
  include(Col1, Col2);

与完全不使用索引相比,覆盖索引之间的主要区别在于,SQL Server必须执行某种类型的行才能枚举它们。索引已经提供了这种排序。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用日期索引优化ROW_NUMBER()

来自分类Dev

ROW_NUMBER()基于日期

来自分类Dev

ROW_NUMBER()基于日期

来自分类Dev

在 mutate dplyr 中使用 row_number() 作为列表索引

来自分类Dev

Microsoft Access查询,使用ROW_NUMBER的替代项作为重复日期

来自分类Dev

如何正确使用Row_Number()

来自分类Dev

ROW_NUMBER()OVER(PARTITION BY ...)使用麻烦

来自分类Dev

LINQ使用ROW_NUMBER()函数吗?

来自分类Dev

PostgreSQL row_number不按日期排序

来自分类Dev

如何在不使用ROW_NUMBER()的情况下模仿ROW_NUMBER()功能?

来自分类Dev

读取row_number

来自分类Dev

ROW_NUMBER 性能

来自分类Dev

使用SQL使用Row_Number()使用行号更新表

来自分类Dev

使用row_number()的无效列名OVER(PARTITION BY)

来自分类Dev

distinct和row_number不能一起使用

来自分类Dev

最近在分区上使用row_number()的SQL

来自分类Dev

如何在UPDATE子句中使用ROW_NUMBER()?

来自分类Dev

如果未识别列名,如何使用ROW_NUMBER()?

来自分类Dev

使用ROW_NUMBER函数选择最后一行

来自分类Dev

如何使用条件和PARTITION BY制作ROW_NUMBER()函数?

来自分类Dev

使用ROW_NUMBER()窗口函数选择行

来自分类Dev

使用ORDER BY代替PARTION BY row_number()。over()

来自分类Dev

将ROW_NUMBER()与聚合函数一起使用

来自分类Dev

尝试使用ROW_NUMBER()时出现错误,为什么?

来自分类Dev

在PostgreSQL中使用row_number()进行数据透视

来自分类Dev

在更新语句中使用Row_Number()

来自分类Dev

使用Row_Number时如何跳过NULL(或0)?

来自分类Dev

使用ROW_NUMBER()时对结果进行排序

来自分类Dev

如果未识别列名,如何使用ROW_NUMBER()?

Related 相关文章

热门标签

归档