【发布时间】:2019-01-22 05:15:26
【问题描述】:
问题:我很困惑如何利用索引列来提高性能或缩短执行时间,特别是在窗口函数中。
情况:我正在根据订单日期(从最早到最新)对交易进行排名。 我的第一反应是按事务的 issue_date 排序(在 Partition by 子句中)。但是随后 transaction_id 列被索引并且是表的主键。查看表的属性,Identity Increment 属性为空白(不知道为什么,但猜测它的自动增量)。所以我假设按 transaction_id 排序会产生相同的输出,但会大大提高执行速度。
我有以下疑问:
SELECT
transaction_id
,CAST(subscription_id as VARCHAR) as subscription_id
,product_id
,ROW_NUMBER() OVER (PARTITION BY subscription_id ORDER BY issue_date ASC) AS tx_rank
FROM table.transactions
我是否应该像这样将 issue_date 切换为 transaction_id:
ROW_NUMBER() OVER (PARTITION BY subscription_id ORDER BY transaction_id ASC) AS tx_rank
注意:这个查询需要超过 10 毫秒,我想尽可能提高它的性能。
【问题讨论】:
-
尝试时会发生什么?这两个执行计划说明了什么?
-
@Tab Alleman 当我自己运行查询时,它崩溃了。这是我与其他查询结合的 cte 的一部分。我正在努力寻找减轻内存使用量的方法。
标签: sql sql-server indexing partitioning