Я раньше думал, что Оракл умный. И сам умеет оптимизировать выполнение запросов. А тут наткнулся на ситуацию, когда простейший
SELECT count(*) FROM однатаблица WHERE поле = 'foo' AND дата_добавления >= SYSDATE-30/1440
выполнялся по 15 минут, пока в запрос явным образом не добавили /*+ INDEX_JOIN(BAZ) */
Что я делаю неправильно?
SELECT count(*) FROM однатаблица WHERE поле = 'foo' AND дата_добавления >= SYSDATE-30/1440
выполнялся по 15 минут, пока в запрос явным образом не добавили /*+ INDEX_JOIN(BAZ) */
Что я делаю неправильно?
no subject
Но подход выкинуть rbo и хинты тоже упрощенный - все равно будут ситуации где человеку лучше знать как провести оптимизацию. Но как я уже говорил мой oracle остановился на версии 8i (который кстати я незнал-незнал и забыл) - возможно у них есть какая-то другая альтернатива для этого, про которую я просто не знаю.
no subject
no subject
no subject
select *
from t1,t2
where t1.f0=t2.f0 and t1.f1=0 and t2.f1<0
что сделает mysql ?
no subject
Сам пример хороший аргумент против концепции "ничего кроме rule based не "нужно
no subject
mysql всегда сначала идет в первую (во from) таблицу или как?
no subject
Я на самом деле понял, что если сделать индексы:
t1: f1, f0
t2: f1, f0
то этот запрос можно выполнить очень быстро проходом по 2 индексам сразу.
no subject
no subject
Ну и еще оракл позволяет намного более изощеренные варианты и оптимизатор там намного намного сложнее.
вот например
http://www.sql.ru/forum/actualsearch.aspx?search=%CD%E5+%EF%EE%ED%FF%F2%ED%EE%2C+%E2%FB%E1%E8%F0%E0%E5%F2+%EF%EB%E0%ED+%F1+%E1%EE%EB%FC%F8%E5%E9+%F1%F2%EE%E8%EC%EE%F1%F2%FC%FE&sin=0&a=%C6%F3%F0%E0%E2%EB%E5%E2+%C4%E5%ED%E8%F1&ma=0&bid=3&dt=-1&s=1&so=1
оракл лажает на запросах, которые в принципе невозможны в информиксе.
с другой стороны
http://www.sql.ru/forum/actualthread.aspx?bid=3&tid=362323#3689350
оптимизатор оракла строит план очень долго, а информикс за 0.1 сек.
no subject
select *
from (select * from a where func1(a.f0)>0 and numrows>=0), b
но причина лишь в том что проектировщик слишком полагался на функции, а их стоимость современные субд оценить не могут.
no subject
тьфу rownum
писал в этот момент в информиксе запрос к systables и переклинило.
для запроса с rownum оптимизатор не может сделать merge
т.е. переписать к виду:
select *
from a , b
where func1(a.f0)>0
Re: тьфу rownum
Re: тьфу rownum
Т.е. функция тяжеловесна и ее надо выполнить последним предикатом
имеем запрос
select * from a where a.f1=100 and func1(a.f0)>0
какой предикат проверяется сначала, а фиг знает, а все функции по мнению оракла равен 0
есть хинт ordered_predicates но он неудобен, если предикатов >2
я переписываю запрос так numrows>=0
select *
from (select * from a where ... and numrows>=0)
where func1(a.f0)>0
Re: тьфу rownum