Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Господа, ситуация следующая: есть таблица фактов, содержащая данные по продажам (дата, ID номенклатуры, .....и.т.д.) есть таблица цен, со следующими полями: Дата начала периода действия Дата конца периода действия Тариф (тип цены) ID номенклатуры Цена в конечной "витрине"(view) необходимо вытянуть порядка 7 цен по различным прайс-листам (в т.ч. себестоимость и др...) время выполнения запроса с учетом цен увеличивается более чем в 2 раза по сравнению с view без цен.. кто-нибудь сталкивался с подобной задачей? подскажите плз, как можно более оптимально сделать схему хранения и выполнения запросов к такой информации?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2006, 12:34 |
|
||
|
Оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
поясните: Garryхв конечной "витрине"(view) необходимо вытянуть порядка 7 цен по различным прайс-листам (в т.ч. себестоимость и др...) т.е. создать PivotTable? Garryхвремя выполнения запроса с учетом цен увеличивается более чем в 2 раза по сравнению с view без цен.. абсолютные цифры назовите, а то 1 сек от 2 сек тоже в 2 раза отличаются... да и на сам запрос неплохо бы посмотреть Garryхкак можно более оптимально сделать схему хранения и выполнения запросов к такой информации?? на чем? продукт, версия и вообще детальнее по таблицам - какие индексы, связи, типы полей, кол-во записей.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2006, 13:52 |
|
||
|
Оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
прошу прощения за безграмотность но с термином PivotTable не знаком - видимо это из MS.... у нас БД Oracle 10g абсолютные цифры: 240 секунд и 560 секунд - полностью выполнение запроса за один месяц. текст исполняемого запроса прибл-но следующий: select df.doc_date, df.doc_type, df.agn_id, df.nomen_id, f_get_price(df.doc_date,df.nomen_id,'SRT') nprice_srt, .............................. from t_doc_facts df f_get_price содержит в себе следующий запрос: select t.price into Result from at_wh_prices t where t.nomen_rn = nNOMEN_ID and t.tariff = STARIFF and t.price_date <= DDATE and (t.end_date >=DDATE or t.end_date is null) где nNOMEN_ID, STARIFF, DDATE - параметры передаваемые предыдущим селектом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2006, 14:14 |
|
||
|
Оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
индексы стоят на всех полях таблицы at_wh_prices по которым идет выборка... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2006, 14:20 |
|
||
|
Оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
ой, и сразу стало неинтересно... в смысле с ORACLE (лет 12 не работаю уже) однако... во-первых Pivot это не MS это общий термин при развертке строк в колонки, я его и имел в виду, т.е. каждая строка содержит все 7 Ваших цен. но видать здесь не то... во-вторых, а какой такой большой смысл использовать функцию, не проще ли сделать обычный JOIN или Oracle сложные условия в них не тянет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2006, 14:32 |
|
||
|
Оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Хм... Ну, во-первых, постарайтесь избавиться от функции, т.е. написать единый запрос, без функции. Во-вторых - рассмотрите вариант хранения цен в таблице фактов. В-третьих, выделяйте пожалуйста, участки кода тегами SRC. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2006, 14:36 |
|
||
|
Оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Ок, насчет pivot я кажется понял - в принципе наверное это как раз оно, либо похоже: т.е. цены хранящиеся в строках (правда все типы цен(тарифы) хранятся в 1 таблице), преобразуются в 1 строку от ф-ции попробую избавиться-просто изначально так было проще :) Goster а можно поподробнее о GosterВо-вторых - рассмотрите вариант хранения цен в таблице фактов. плз??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2006, 14:48 |
|
||
|
Оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Garryх Goster а можно поподробнее о GosterВо-вторых - рассмотрите вариант хранения цен в таблице фактов. плз??? Ну, храните значение f_get_price(df.doc_date,df.nomen_id,'SRT') в таблице t_doc_facts. :) Таблица фактов - это по сути - показатели + ссылки на значения таблиц, содержащих члемы измерений. А у вас показатель также является ссылкой. Что, возможно, не совсем правильно. Хотя, на самом деле, все зависит от вариантов использования. Опять же - не понятно, является ли цена в данном случае показателем. Как вариант - храните там rowid'ы таблицы с ценами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2006, 15:16 |
|
||
|
Оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Goster Ну, храните значение f_get_price(df.doc_date,df.nomen_id,'SRT') в таблице t_doc_facts. :) Таблица фактов - это по сути - показатели + ссылки на значения таблиц, содержащих члемы измерений. А у вас показатель также является ссылкой. Что, возможно, не совсем правильно. Хотя, на самом деле, все зависит от вариантов использования. Опять же - не понятно, является ли цена в данном случае показателем. Как вариант - храните там rowid'ы таблицы с ценами. да, цены у нас в таблице фактов - это показатели, я вас понял, но тогда получается увеличится время ETL, за счет увеличения времени формирования таблицы фактов?? :) про rowid'ы что-то я опять не совсем понял :) что это даст? хранить в таблице фактов, как ссылки на цены?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2006, 15:32 |
|
||
|
Оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Garryхда, цены у нас в таблице фактов - это показатели, я вас понял, но тогда получается увеличится время ETL, за счет увеличения времени формирования таблицы фактов?? :) Ну, как обычно - или уменьшаем время загрузки и объем, или уменьшаем время запроса. А вы как хотели? И на елку влезть и зад не ободрать? :)) Может вам здесь кто-нибудь что-то еще подскажет, но я бы на вашем месте обратился с вопросом по производительности запроса в форум по Oracle. Там быстрее помогут. Garryх про rowid'ы что-то я опять не совсем понял :) что это даст? хранить в таблице фактов, как ссылки на цены?? Если у вас в таблице цен хранится только одно значение цены - то ничего :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2006, 16:03 |
|
||
|
Оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Goster Ну, как обычно - или уменьшаем время загрузки и объем, или уменьшаем время запроса. А вы как хотели? И на елку влезть и зад не ободрать? :)) Может вам здесь кто-нибудь что-то еще подскажет, но я бы на вашем месте обратился с вопросом по производительности запроса в форум по Oracle. Там быстрее помогут. Ок, попробую еще туда, но в принципе и здесь мне подсказали немало - на то, что показатели цен не там где нужно наверное действительно имеет смысл обратить внимание и от функции попробую избавиться :) Спасибо !!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2006, 16:39 |
|
||
|
|

start [/forum/topic.php?fid=49&msg=33802517&tid=1869982]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
92ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 214ms |
| total: | 405ms |

| 0 / 0 |
