在索引列和日期列之间查询分区的性能

时间:2019-01-21 20:50:40

标签: sql sql-server indexing partitioning

问题:我很困惑如何利用索引列来提高性能或缩短执行时间,尤其是在窗口函数中。

情况:我正在根据订单日期(最旧到最新)对交易进行排名。 我的本能是按事务的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万,我想尽可能提高其性能。

1 个答案:

答案 0 :(得分:1)

不太可能有很大的不同。 row_number()可以利用正在使用的列上的索引-(subscription_id, issue_date)(subscription_id, transaction_id)

我不确定索引是否可以显着加快速度。您正在选择整个表,这可能很大。