Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.04.30;
Скачать: [xml.tar.bz2];

Вниз

А вот вопрос по Oracle   Найти похожие ветки 

 
Тфьу   (2006-04-11 11:54) [0]

Какой хинт надо использовать, чтобы вложенные запросы разбирались по плану отдельно?

Есть проблема - запрос работает отлично (в смысле быстро). Если добавить упорядочивание (order) ломается весь план и запрос начинает работать безумно долно.
Если сделать:
select *
from(запрос)
order by ...
То Oracle просекает и это и ломает план. Если запрос добавить во вьюху, а потом упорядочивать ее, то тоже самое.
Помоите упорядочить данные запроса постфактум, то есть, когда они уже получены, желательно без темповых таблиц, мемори тейблов в Делфи и т.п.
По идее, должен быть какой-то хинт, но я не знаю такой, и в хелпе Oracle найти не удалось...


 
Desdechado ©   (2006-04-11 12:00) [1]

ORDER BY даст по-любому другой план просто потому, что ему нужно получить все записи перед их сортировкой

можешь попробовать +rule, но сомневаюсь, что поможет


 
Тфьу   (2006-04-11 12:03) [2]

Не сработало. :(

Пойду вешаться и креатить темпорари тейбл...
Блин, а казалось работы на пять минут...


 
Sergey13 ©   (2006-04-11 12:08) [3]

Тут, ИМХО, не план "ломается", а смысл запроса меняется.
Сравни статистику запросов.


 
Тфьу   (2006-04-11 12:26) [4]

Вот объясню по-простому.
Есть запрос, который работает быстро (не более 10 секунд, обычно 2-3 секунды) и показывает пользователю данные в DBGrid.
Пользоваетль хочет, чтобы эти данные были упорядочены. Добавляю ORDER, запрос работает около двадцати минут.
Объем результирующих данных запроса примерно 500 строк.

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

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


 
Курдль ©   (2006-04-11 12:32) [5]

А разве у стандартного ДатаГрида или ДатаСэта нельзя запрограммировать алгоритм сортировки?
Или я путаю с TList...


 
Sergey13 ©   (2006-04-11 12:33) [6]

2[4] Тфьу   (11.04.06 12:26)
>Вот объясню по-простому.
>Есть запрос, который работает быстро
Проведи простой эксперимент. После Open дай датасету FetchAll или Last (короче закачай все записи принудительно). И посмотри, скоро ли в гриде появится инфа.


 
Тфьу   (2006-04-11 12:45) [7]


> А разве у стандартного ДатаГрида или ДатаСэта нельзя запрограммировать
> алгоритм сортировки?

По крайней мере я не знаю, как это делать...


> Проведи простой эксперимент. После Open дай датасету FetchAll
> или Last (короче закачай все записи принудительно). И посмотри,
>  скоро ли в гриде появится инфа.

И FetchAll, и запрос в PL/SQL Developer (если нажать загрузить все) работают быстро.


 
Курдль ©   (2006-04-11 12:48) [8]

Да, кстати, а какие компоненты доступа-то? DOA? ODAC?


 
Sergey13 ©   (2006-04-11 12:49) [9]

2[7] Тфьу   (11.04.06 12:45)
Давай запрос посмотрим. Чего гадать то.


 
Тфьу   (2006-04-11 12:56) [10]

Доступ у меня через DOA.

Проблему решил. Всем спасибо!
Мое решение:

select *
from (
запрос
union all
select 0 aaa, ...(поля запроса, но имеющие фиктивные значения)
from dual
) s
where s.aaa<>0
order by 2,3,4

В запрос добавляю фиктивное поле "select 1 aaa, ..."(далее нужные поля)
Вот тут то Oracle сказал упс, и здался...


 
Кщд ©   (2006-04-11 13:06) [11]

смысл в том, чтобы сначала так
select 0 aaa, ...from dual
а затем так:
where s.aaa<>0
?


 
Sergey13 ©   (2006-04-11 13:10) [12]

2[10] Тфьу   (11.04.06 12:56)
>Мое решение:
>Вот тут то Oracle сказал упс, и здался...

Напоминает анекдот про китайских хакеров и согласие сервера на 25000000 попытке, что его пароль - "Мао Дзедун". 8-)


 
Тфьу   (2006-04-11 13:14) [13]


> смысл в том, чтобы сначала такselect 0 aaa, ...from dualа
> затем так: where s.aaa<>0?


При этом Oracle воспринимает вложенный запрос как единое целое и не пытается это оптимизировать.


> Напоминает анекдот про китайских хакеров и согласие сервера
> на 25000000 попытке, что его пароль - "Мао Дзедун". 8-)

Главное, чтобы потом никто этот код не увидел (стыдно будет), и не дай бог не подумал так же, как и Кщд (и не убрали эти "глупые" строки).


 
Кщд ©   (2006-04-12 08:40) [14]

Тфьу   (11.04.06 13:14) [13]
главное - не страдать ректально-ориентированным программированием :)
no_merge



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.04.30;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.013 c
2-1144782592
kester
2006-04-11 23:09
2006.04.30
Выделение строки цветом в TRichEdit


5-1130482196
Priest
2005-10-28 10:49
2006.04.30
Вложеное свойство типа компонент


2-1144938342
Anubis
2006-04-13 18:25
2006.04.30
Создание Кнопки


1-1142950062
DelphiLexx
2006-03-21 17:07
2006.04.30
Глюк в Delphi 2005 [Fatal Error] F2039 Could not .. dcu Unit1.dc


1-1143203538
.Кирилл
2006-03-24 15:32
2006.04.30
Как записать в бинарный файл данные String





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский