Здравствуйте, Andy Panda, Вы писали:
AP>В нескольких запросах приложения, работающего с унаследованой БД, встречается вот такое условие (или подобные ему).
AP>AP>select * from goods g
AP>where ...
AP>and (app_restr.hasbrandrestriction = 0 or g.mnf_id in (select BrandId from restricted_brands where restricted_brands.restrictionid = app_restr.restrictionid))
AP>...
AP>
AP>Один коллега утверждает, что на таких условиях оптимизатор обламывается, и надо их избегать.
AP>Так ли это? Какие есть альтернативы?
Это скажет только план запроса. У меня тоже встречались подобные запросы. Но оптимизатор их вполне проглатывал.
AP>Есть ли какое-нибудь средство типа MS SQL Query Analyzer где можно посмотреть примерный план запроса?
Есть. Гугли TOAD, PLSQL Developer.
С годами я делаюсь все менее терпимым к людям неумным и неумеющим работать свое дело очень хорошо. (с) М. Веллер
Здравствуйте, Andy Panda, Вы писали:
AP>Один коллега утверждает, что на таких условиях оптимизатор обламывается, и надо их избегать.
AP>Так ли это? Какие есть альтернативы?
Альтернатива — избегать таких коллег.
(Знять бы еще, что он себе представляет, говоря "оптимизатор обламывается")
AP>Есть ли какое-нибудь средство типа MS SQL Query Analyzer где можно посмотреть примерный план запроса?
SQL*Plus, set autotrace
Здравствуйте, Andy Panda, Вы писали:
AP>Так ли это? Какие есть альтернативы?
Используйте свои хинты для настройки плана запроса
Собирайте статистику по таблицам — план будет автоматом лучше строится,
хотя встречал запросы которые до 10 000 записей в таблице отрабатывают нормально, если в таблице от 10 000 до 100 000 то криво план строит, а когда больше 100 000 опять нормально
ставьте для простоты хинт Star или Rule очень часто нормально с ними идет отработка запросов.
Так же можно сложные запросы заменить PipeLine функциями, хоть и медленее но надежнее
на простых запросах редко оптимизатор врет.
В нескольких запросах приложения, работающего с унаследованой БД, встречается вот такое условие (или подобные ему).
select * from goods g
where ...
and (app_restr.hasbrandrestriction = 0 or g.mnf_id in (select BrandId from restricted_brands where restricted_brands.restrictionid = app_restr.restrictionid))
...
Один коллега утверждает, что на таких условиях оптимизатор обламывается, и надо их избегать.
Так ли это? Какие есть альтернативы?
Есть ли какое-нибудь средство типа MS SQL Query Analyzer где можно посмотреть примерный план запроса?
... << RSDN@Home 1.2.0 alpha rev. 648>>