问题:我很困惑如何利用索引列来提高性能或缩短执行时间,尤其是在窗口函数中。
情况:我正在根据订单日期(最旧到最新)对交易进行排名。 我的本能是按事务的issue_date排序(在Partition by子句中)。但是,然后transaction_id列被索引并且是表的主键。查看表的属性,“身份增量”属性为“空白”(不知道为什么,但猜测其自动增量)。因此,我假设按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
注意::此查询占用的时间超过1000万,我想尽可能提高其性能。
答案 0 :(得分:1)
不太可能有很大的不同。 row_number()
可以利用正在使用的列上的索引-(subscription_id, issue_date)
或(subscription_id, transaction_id)
。
我不确定索引是否可以显着加快速度。您正在选择整个表,这可能很大。