Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Оптимизация запроса  [new]
Caspian
Member

Откуда:
Сообщений: 45
Есть запрос, который запускается каждую неделю в один и тот же день. Чтобы не изменять каждый раз период, я вставил в него конструкцию "WHERE a.time BETWEEN trunc(sysdate) - 7 and trunc(sysdate) and...". Работает замечательно, но примерно в 40(!) раз дольше. Можно ли с этим что-либо сделать? Заранее спасибо!
27 сен 07, 17:00    [4725959]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
OraDen
Member

Откуда:
Сообщений: 828
А раньше как был задан период?
27 сен 07, 17:01    [4725982]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
Mikst
Member

Откуда: Москва
Сообщений: 983
в 40 раз дольше чем что? планы обоих запросов в студию
27 сен 07, 17:02    [4725993]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
Caspian
Member

Откуда:
Сообщений: 45
OraDen
А раньше как был задан период?

WHERE a.time BETWEEN to_date('20070901','YYYYMMDD') and to_date('20070908','YYYYMMDD')
27 сен 07, 17:04    [4726012]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
Caspian
Member

Откуда:
Сообщений: 45
Mikst
в 40 раз дольше чем что? планы обоих запросов в студию

Знать бы ещё, что такое план и как его посмотреть в PL/SQL Developer...
27 сен 07, 17:06    [4726029]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
Mikst
Member

Откуда: Москва
Сообщений: 983
Caspian

Знать бы ещё, что такое план и как его посмотреть в PL/SQL Developer...


соседняя тема
план в sqlplus
27 сен 07, 17:08    [4726058]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
OraDen
Member

Откуда:
Сообщений: 828
Caspian
Есть запрос, который запускается каждую неделю в один и тот же день. Чтобы не изменять каждый раз период, я вставил в него конструкцию "WHERE a.time BETWEEN trunc(sysdate) - 7 and trunc(sysdate) and...". Работает замечательно, но примерно в 40(!) раз дольше. Можно ли с этим что-либо сделать? Заранее спасибо!

со связанными переменными:
Declare
  d_from date := trunc(sysdate) - 7;
  d_to date := trunc(sysdate);
...
Begin
...
WHERE a.time BETWEEN d_from and d_to and...

Еще можно попробовать обернуть так (но со связанными переменными правильнее):

WHERE a.time BETWEEN (select trunc(sysdate) - 7 from dual) and (select trunc(sysdate) from dual) and...
27 сен 07, 17:18    [4726149]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18398
Caspian
Знать бы ещё, что такое план

План делают индусы и распространяют через сеть агентов, именуемых для конспирации "CBO" (помоложе) и "RBO" (этот постарше).
Самое важное для получения плана - выбрать правильного поставщика, потому что план у них разный.
Ходят упорные слухи, что старик уже при смерти, но еще неизвестно кто кого переживет :)
План бывает разный.
Некоторые виды плана оставляют равнодушным.
Некоторые "вставляют не по-детски"
Некоторые способны даже снести башню.
План курят.
Планы, относящиеся ко второй и третьей категории, курят иногда часами.
27 сен 07, 17:27    [4726242]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
Двоюшник
Member

Откуда: Киев
Сообщений: 1135
andrey_anonymous
Caspian
Знать бы ещё, что такое план

План делают индусы и распространяют через сеть агентов, именуемых для конспирации "CBO" (помоложе) и "RBO" (этот постарше).
Самое важное для получения плана - выбрать правильного поставщика, потому что план у них разный.
Ходят упорные слухи, что старик уже при смерти, но еще неизвестно кто кого переживет :)
План бывает разный.
Некоторые виды плана оставляют равнодушным.
Некоторые "вставляют не по-детски"
Некоторые способны даже снести башню.
План курят.
Планы, относящиеся ко второй и третьей категории, курят иногда часами.

ф мемориз :) лучше не скажешь :)
27 сен 07, 17:48    [4726442]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
Caspian
Member

Откуда:
Сообщений: 45
OraDen

Спасибо! Второй вариант не дал никакого выигрыша, а первый я попробую позже, т. к. никогда раньше не использовал Declare и Begin и не знаком с синтаксисом.
27 сен 07, 18:00    [4726520]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
YAP
Member

Откуда: Киев
Сообщений: 2116
OraDen
Caspian
Есть запрос, который запускается каждую неделю в один и тот же день. Чтобы не изменять каждый раз период, я вставил в него конструкцию "WHERE a.time BETWEEN trunc(sysdate) - 7 and trunc(sysdate) and...". Работает замечательно, но примерно в 40(!) раз дольше. Можно ли с этим что-либо сделать? Заранее спасибо!

со связанными переменными:
Declare
  d_from date := trunc(sysdate) - 7;
  d_to date := trunc(sysdate);
...
Begin
...
WHERE a.time BETWEEN d_from and d_to and...

Еще можно попробовать обернуть так (но со связанными переменными правильнее):

WHERE a.time BETWEEN (select trunc(sysdate) - 7 from dual) and (select trunc(sysdate) from dual) and...


здесь совсем наоборот, лучше литералы использовать, поскольку похоже что с 5% селективностью выходит план, "вставляющий не по-детски"
27 сен 07, 19:20    [4726871]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
Caspian
Member

Откуда:
Сообщений: 45
YAP
здесь совсем наоборот, лучше литералы использовать, поскольку похоже что с 5% селективностью выходит план, "вставляющий не по-детски"


Нельзя ли подробнее, как использовать литералы (и что это)?
27 сен 07, 20:15    [4727058]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
OraDen
Member

Откуда:
Сообщений: 828
Caspian
Есть запрос, который запускается каждую неделю в один и тот же день.
Как он запускается то?
27 сен 07, 20:31    [4727104]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
Caspian
Member

Откуда:
Сообщений: 45
OraDen
Caspian
Есть запрос, который запускается каждую неделю в один и тот же день.
Как он запускается то?

Раньше вручную в PL/SQL Developer, сейчас автоматически по расписанию. Только как это связано со скоростью его работы?
27 сен 07, 20:50    [4727151]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
OraDen
Member

Откуда:
Сообщений: 828
Caspian
OraDen
Caspian
Есть запрос, который запускается каждую неделю в один и тот же день.
Как он запускается то?

Раньше вручную в PL/SQL Developer, сейчас автоматически по расписанию. Только как это связано со скоростью его работы?

Просто стало интересно почему:
Caspian
а первый я попробую позже, т. к. никогда раньше не использовал Declare и Begin и не знаком с синтаксисом
27 сен 07, 20:58    [4727165]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
OraDen
Member

Откуда:
Сообщений: 828
в PL/SQL Developer explain plan - F5 и кнопка на тулбаре есть жирная такая с лампочкой желтой :)
27 сен 07, 21:07    [4727198]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
OraDen
Member

Откуда:
Сообщений: 828
Связанные переменные в PL/SQL Developer цепляются через &

between &d_from and &d_to
27 сен 07, 21:09    [4727202]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18398
OraDen
Связанные переменные в PL/SQL Developer цепляются через &
between &d_from and &d_to

Да ну? Связанные переменные? И давно?
27 сен 07, 21:28    [4727236]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
OraDen
Member

Откуда:
Сообщений: 828
andrey_anonymous
OraDen
Связанные переменные в PL/SQL Developer цепляются через &
between &d_from and &d_to

Да ну? Связанные переменные? И давно?
Я в PL/SQL Developer не работаю через & удалось задать нечто, хотя может он просто литералы к запросу подцепил :)
27 сен 07, 21:31    [4727239]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18398
OraDen
хотя может он просто литералы к запросу подцепил :)

Именно так, PL/SQL Developer в меру своих скромных способностей старается придерживаться стандартов sql*plus.
А бинды выделяются как обычно - двоеточием и доступны к использованию в Command Window и в Test Window
27 сен 07, 21:40    [4727260]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
А л е к с
Member

Откуда:
Сообщений: 6
Caspian
"WHERE a.time BETWEEN trunc(sysdate) - 7 and trunc(sysdate) and...".


Так, имхо, немного побыстрее будет:
WHERE substr(a.time,1,8) BETWEEN to_char(sysdate-7,'YYYYMMDD') and to_char(sysdate,'YYYYMMDD')
27 сен 07, 22:08    [4727313]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
OraDen
Member

Откуда:
Сообщений: 828
А л е к с
Caspian
"WHERE a.time BETWEEN trunc(sysdate) - 7 and trunc(sysdate) and...".


Так, имхо, немного побыстрее будет:
WHERE substr(a.time,1,8) BETWEEN to_char(sysdate-7,'YYYYMMDD') and to_char(sysdate,'YYYYMMDD')
С чего бы это??? неужто с функции которую придется от поля таблицы вычислять не говоря уже о том что nls - зависимо :)
27 сен 07, 22:16    [4727323]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
OraDen
Member

Откуда:
Сообщений: 828
Caspian
WHERE a.time BETWEEN trunc(sysdate) - 7 and trunc(sysdate) and..."
a.time - какого типа, кстати вы помните, что BETWEEN включает границы интервала, вам верхняя граница нужна какая?
27 сен 07, 22:18    [4727328]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
А л е к с
Member

Откуда:
Сообщений: 6
OraDen
a.time - какого типа

Вероятно с этого вопроса к автору и надо было начинать.
P.S. Не ругайся, сам только учусь, не далеко от нуля ушел. Просто у себя неделю так определяю и хотелось на реакцию гуру посмотреть.
27 сен 07, 23:18    [4727442]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
OraDen
Member

Откуда:
Сообщений: 828
А л е к с
Просто у себя неделю так определяю и хотелось на реакцию гуру посмотреть.
И что же это ты так определяешь?
27 сен 07, 23:34    [4727476]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить