Такой запрос на этих данных примерно в 10 раз
эффективнее, чем этот же запрос, выполненный в «старом стиле»:
SELECT *
FROM sample s1
WHERE ID_Trans in
(
SELECT top 2 ID_Trans
FROM sample s2
WHERE s1.ID_Customer =
s2.ID_Customer
ORDER BY amount DESC
)
|
Более того, разница в скорости будет ощутимо расти с
увеличением количества данных в таблице, поскольку в первом случае алгоритм
довольно прост – внутренним запросом нумеруются записи внутри групп, практически за одну сортировку, а затем фильтром во внешнем запросе отсекаются
все лишние записи. Во втором же случае, внутренний подзапрос выполняется
заново, для каждой записи в таблице. Все это очень хорошо видно на планах
запросов. На втором плане количество ожидаемых выполнений подзапроса –
пятнадцать, так как в тестовой табличке 15 записей.
План запроса с аналитической функцией:
Операция Стоимость Количество
----------------------------------------------------------
|--Filter(WHERE:([Expr1003]<(3))) 0.022873 1
|--Sequence
Project(...) 0.022866 1
|--Segment 0.022866 1
|--Segment 0.022866 1
|--Sort(ORDER
BY:(...)) 0.022864 1
|--Clustered Index Scan(...) 0.006423 1
|
План запроса без использования аналитической функции:
Рекомендуем скачать другие рефераты по теме: казахстан реферат, курсовики скачать бесплатно.
Предыдущая страница реферата |
1
2
3
4
5
6
7 |
Следующая страница реферата