Производительность запроса раздела по индексируемому столбцу и столбцу даты - PullRequest
0 голосов
/ 21 января 2019

Проблема: Меня смущает, как использовать индексированные столбцы для повышения производительности или ускорения времени выполнения, особенно в оконных функциях.

Ситуация: Яранжирование транзакций на основе даты заказа (от самой старой до самой новой).Мой первый инстинкт - это ЗАКАЗАТЬ по отпускной дате транзакции (в разделе Разделение по).Но тогда столбец транзакции_id индексируется и является первичным ключом таблицы.Если посмотреть на свойства таблицы, то свойство Identity Increment будет пустым (не знаю почему, но угадываю его автоинкремент).Таким образом, я предполагаю, что упорядочение по транзакции за транзакцией даст тот же результат, но значительно улучшит скорость выполнения.

У меня есть следующий запрос:

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 на транзакцию_ид как таковую:

ROW_NUMBER() OVER (PARTITION BY subscription_id ORDER BY transaction_id ASC) AS tx_rank

Примечание: Этот запрос занимает более 10 млн., И я хочу максимально повысить его производительность.

1 Ответ

0 голосов
/ 22 января 2019

Вряд ли это что-то изменит. row_number() может использовать индекс используемых столбцов - (subscription_id, issue_date) или (subscription_id, transaction_id).

Я не уверен, что индекс значительно ускорит процесс. Вы выбираете всю таблицу, и это, вероятно, довольно большой.

...