У меня есть TABLE_A (С1, С2, С3, ....., Cn, штамп даты)Аналитические характеристики функции дорогостоящими
Примечание: Колонка штамп даты индексируется
QRY1
select * from
(select max(datestamp) dates from table_A) t,
table_A
where a.datestamp = t.dates
QRY2
select * from (
select a.* , max (datestamp) over() dates from table_A a))
where datestamp = dates
Объясните Paln из QRY1 с помощью индексированного сканирования (execyted в 1 сек) стоимость была очень меньше.
Но для QRY2 для полного сканирования таблицы (исполненной за 8 секунд) стоимость была очень высокой.
Просто хотел знать, почему аналитическая функция игнорирует индексы.
Благодаря (я usig PL/SQL Oracle 10g)
Это действительно интересный пример. если у вас есть индекс по датам, тогда первый подзапрос в QRY1, вероятно, сделает «MIN/MAX» сканирование (стоимость спуска по дереву, возможно, ~ 3), а затем выборка строки с использованием того же индекса - одной строки. Я предполагаю, что он не уникален, поэтому сканирование диапазона (вероятно, стоит около ~ 4), так что это довольно быстро. аналитическая функция с другой стороны - вероятно, сортировать данные, которые вызывают полное сканирование таблицы, поэтому это намного дороже. вы должны использовать аналитические функции, в которых вы используете агрегированную функцию на * частях * данных (раздел по разделу). – haki