2016-05-15 3 views
0

У меня есть две функции Rank, которые дают мне те же результаты, но кто-то может предоставить информацию о том, какой путь более эффективен или это только случай личных предпочтений?SQL Server - 2008 Rank Эффективность функции

Один использует таблицу PK, а другую последнюю версию UpdateDate для этого идентификатора.

select Distinct 
DENSE_RANK() OVER 
(PARTITION BY a2.id ORDER BY a2.updateddate DESC) seq_LatestUpdate_Date, 
DENSE_RANK() OVER 
(PARTITION BY a2.id ORDER BY a2.cdm_id DESC) seq_LatestUpdate_ID 
+0

Вы проверили, какова сметная стоимость для двух запросов, используя ПОКАЗАННЫЙ ПЛАН ПО ЭКСПЛУАТАЦИИ? –

+0

Я предполагаю, что вам не хватает ')' после первого 'DESC'. В противном случае ваш запрос недействителен. – lad2025

ответ

0

Во-первых, любые последствия производительности в dense_rank(), вероятно, полностью уничтожена в distinct. Если вы зададите другой вопрос с полным запросом, то он, вероятно, может быть более эффективным.

Во-вторых, единственное, что представляет интерес с точки зрения эффективности, заключается в том, существует ли индекс на authid. Лучшие индексы будут (authid, dcm_id desc) для второго, и аналогичный индекс для первого.

Хорошо, возможно, существует небольшая разница, потому что столбцы заказов немного больше в первом случае, чем второй (при условии простых типов для всего). Но на самом деле, учитывая такие различия в производительности, несомненно, преждевременная оптимизация.

0

Основываясь на том, что вы опубликовали, не будет различий в производительности между ними.

Как правило, если одна из причин вызывает сортировку в плане выполнения, а другая, то тот, который требует сортировки, будет медленнее.

Как написано, оба потребуют своего рода. Для того, чтобы предотвратить то для первой вы хотели бы этот индекс:

CREATE INDEX nc_xxx1 ON a2(id, updateddate DESC) INCLUDE (<other rows returned by your query>) 

Для второго вы хотите этот индекс:

CREATE INDEX nc_xxx2 ON a2(id, cdm_id DESC) INCLUDE (<other rows returned by your query>) 

Также можно создать индекс, который охватывает как, в том числе и ваш кластеризованный индекс.

Смежные вопросы