Только нужно учесть, что при анализе представлений, использующих представления, оптимизатор бывает начинает глючить, и он не может выбрать правильный план запроса. Т.е. в сложной иерархии
представлений можно потерять производительность если не обращать на это внимание.
«либо вариант два испольнить внутрение селекты по отдельности заинсертить эти занчение в три глобальные таблицы, а уже после соединить и с агрегировать. для этого как вы понимаете придется использовать pl/sql процедуру.
Вариант два будет как правило предпочтительнее. „
Во-первых, пишите чуть-чуть грамотней, тяжело читать, но это так, придирки.
Во-вторых, что-то я вас не понимаю. С чего это он будет предпочтительней? Вы думаете вы сами соедините эти таблицы лучше чем ядро SQL? Ошибаетесь. Производительность у вашего горе-решения с временными таблицами будет намного хуже, можете проверить на практике и убедиться.
Так что ваш пример — полностью fail.
Временные таблицы создают те, кто перешел в Oracle из MS-SQL. В Oracle почти никогда нет необходимости во временных таблицах в коде. Вполне можно обойтись курсорами и коллекциями.
«В пл/сиквеле если большая выборка „
От размера выборки вообще не зависит.
“ что само по себе не плохо, но это лишний объект. „
Еще один бред. Кому он лишний? Как будто интерпретатор sql не создает временных объектов при выполнении запроса. Еще неизвестно какой объект будет больше по размеру и тормознутее — универсальный, или созданный в коде специально для этой задачи.
Спасибо, отличная статья!
Хотя трудно придумать все-таки хоть один реальный пример где MODEL была бы нужна. Было бы интересно если бы вы написали какой-нибудь запрос на котором MODEL быстрее PL/SQL -ной реализации хотя бы в 2 раза.
Официальный вердикт будет нескоро. Теперь журнал выделит некоторое количество рецензентов, каждый из них возьмет кусок доказательства и будет тщательно его проверять. Это легко может растянуться на полгода
Про выйгрыш в производительности при использовании ссылок — как-то очень сомнительно. Вы пробовали создать кластер или хэш-кластер и сравнить производительность для этого случая? Кажется, он будет намного быстрее.
1. Сделайте все-таки скольжение. Скорость увеличивается довольно быстро, и без скольжения играть почти невозможно.
2. Я не верю в людей у которых АPM > 1000. Это явно боты.
Что-то либо я не понимаю, либо вы бредите.
1. Как мы можем узнать текущем блоке узнать, «что следующий блок завершился ошибкой»?
Нужно в будущее заглядывать?
2. «Либо, перед окончанием транзакции проверяем (по определенным, напрямую зависящим от транзакции критериям), что именно у нас сработало, а что — нет — (этот способ сравнительно легко гуглится) „
Что такое “ перед окончанием транзакции»? Каким образом вы это определите? Вы в курсе, что если возникает исключение, то обработка прерывается, и переходит в блок исключений? Вы в курсе, что rollback to savepoint — это не «прыжок», как вы выразились, а откат изменений?
Вы в курсе, что нельзя переходить из блока исключений обратно в блок операторов?
Возможно, это я вас не понимаю. Может, если вы напишете код, то ситуация прояснится.
Например простая задача: вставить запись в таблицу, записать при этом в лог-таблицу — успешно она вставилась или нет.
Что значит «прыгаете к сохраненному значению а потом врубаете обработку ошибок»? Вы по-моему не представляете себе ни как работает rollback to savepoint, ни вообще как обрабатываются исключения.
Вставлю 5 копеек, т.к. разбирался немного в теме.
Да, в глобальном смысле всегда можно сказать, что любой тест проверяет только умение решать данный конкретный тест. Скажем, сертификат Oracle или Cisco весьма ценится, и придает обычно больший вес соискателю в глазах работодателя, но я видел много раз на форумах как профессионалы говорят тоже что-то подобное, типа «Экзамен 1Z0-147 проверяет только умение отвечать на вопросы 1Z0-147». Точно так же ЕГЭ по математике — «проверяет только умение решать ЕГЭ по математике». Причина проста — разумеется, всегда можно при свободном доступе к заданиям и наличии времени натаскаться на любой тест, не приобретя при этом тех вещей, что он проверяет. Более того, многие люди именно так и действуют всегда — готовятся именно к тесту, вместо того, чтобы повышать свой скилл. Что приводит к усложнению теста, и невозможности его сдать без прямой подготовки именно к нему и т.д. Проблема всех тестов, которым придают слишком много значения.
С тестами по IQ ситуация еще хуже, его вообще все ненавидят. Всегда можно допустить, что я не знаю, скажем, химию, но для большинства невозможно допустить, что «я тупой» или даже «я среднестатистически умный». Таким образом большинство, пройдя тест, и получив стандартные обычные результаты, сразу же считает, что этот тест «ничего не проверяет».
Ну, и несколько классических ошибок которую здесь(да и везде) допускают в комментах.
1. «У Эйнштейна был низкий IQ, а он гений» — во-первых не IQ, а оценки в школе, тест на IQ он не проходил, возможно он бы показал высокий результат.
Во-вторых как вы видите не такие уж и плохие у него были оценки.
В-третьих даже если было бы и так, тест IQ проверяет вполне конкретную вещь — способность быстро и эффективно оперировать с определенными абстрактными объектами. Меж тем, способность делать научные открытия зависит не только от этого, а от способности всесторонне исследовать проблему, найти нестандартный подход и т.д.
2. «У того чела высокий IQ, а он работает дворником» — а кто вообще сказал, что жизненный успех определяется интеллектом? Разумеется это не так. Не менее большую роль играет еще куча факторов, среди которых характер, воля, мотивация, связи, случай в конце концов.
С каких пор отсутствие возможности купить оправдывает пиратство?
А если продавец в магазине откажется продать вам вещь ( неважно по какой причине), вы придете ночью и украдете ее?
Я тоже немного не понял. В 45 раз быстрее за счет того, что все хранится в оперативной памяти? А что будет, если вдруг свет вырубят? Ну, и непонятно как быть с по-настоящему большими БД, которые в оперативку не влезут.
представлений можно потерять производительность если не обращать на это внимание.
Вариант два будет как правило предпочтительнее. „
Во-первых, пишите чуть-чуть грамотней, тяжело читать, но это так, придирки.
Во-вторых, что-то я вас не понимаю. С чего это он будет предпочтительней? Вы думаете вы сами соедините эти таблицы лучше чем ядро SQL? Ошибаетесь. Производительность у вашего горе-решения с временными таблицами будет намного хуже, можете проверить на практике и убедиться.
Так что ваш пример — полностью fail.
«В пл/сиквеле если большая выборка „
От размера выборки вообще не зависит.
“ что само по себе не плохо, но это лишний объект. „
Еще один бред. Кому он лишний? Как будто интерпретатор sql не создает временных объектов при выполнении запроса. Еще неизвестно какой объект будет больше по размеру и тормознутее — универсальный, или созданный в коде специально для этой задачи.
Хотя трудно придумать все-таки хоть один реальный пример где MODEL была бы нужна. Было бы интересно если бы вы написали какой-нибудь запрос на котором MODEL быстрее PL/SQL -ной реализации хотя бы в 2 раза.
2. Я не верю в людей у которых АPM > 1000. Это явно боты.
1. Как мы можем узнать текущем блоке узнать, «что следующий блок завершился ошибкой»?
Нужно в будущее заглядывать?
2. «Либо, перед окончанием транзакции проверяем (по определенным, напрямую зависящим от транзакции критериям), что именно у нас сработало, а что — нет — (этот способ сравнительно легко гуглится) „
Что такое “ перед окончанием транзакции»? Каким образом вы это определите? Вы в курсе, что если возникает исключение, то обработка прерывается, и переходит в блок исключений? Вы в курсе, что rollback to savepoint — это не «прыжок», как вы выразились, а откат изменений?
Вы в курсе, что нельзя переходить из блока исключений обратно в блок операторов?
Возможно, это я вас не понимаю. Может, если вы напишете код, то ситуация прояснится.
Например простая задача: вставить запись в таблицу, записать при этом в лог-таблицу — успешно она вставилась или нет.
Да, в глобальном смысле всегда можно сказать, что любой тест проверяет только умение решать данный конкретный тест. Скажем, сертификат Oracle или Cisco весьма ценится, и придает обычно больший вес соискателю в глазах работодателя, но я видел много раз на форумах как профессионалы говорят тоже что-то подобное, типа «Экзамен 1Z0-147 проверяет только умение отвечать на вопросы 1Z0-147». Точно так же ЕГЭ по математике — «проверяет только умение решать ЕГЭ по математике». Причина проста — разумеется, всегда можно при свободном доступе к заданиям и наличии времени натаскаться на любой тест, не приобретя при этом тех вещей, что он проверяет. Более того, многие люди именно так и действуют всегда — готовятся именно к тесту, вместо того, чтобы повышать свой скилл. Что приводит к усложнению теста, и невозможности его сдать без прямой подготовки именно к нему и т.д. Проблема всех тестов, которым придают слишком много значения.
С тестами по IQ ситуация еще хуже, его вообще все ненавидят. Всегда можно допустить, что я не знаю, скажем, химию, но для большинства невозможно допустить, что «я тупой» или даже «я среднестатистически умный». Таким образом большинство, пройдя тест, и получив стандартные обычные результаты, сразу же считает, что этот тест «ничего не проверяет».
Ну, и несколько классических ошибок которую здесь(да и везде) допускают в комментах.
1. «У Эйнштейна был низкий IQ, а он гений» — во-первых не IQ, а оценки в школе, тест на IQ он не проходил, возможно он бы показал высокий результат.
Во-вторых как вы видите не такие уж и плохие у него были оценки.
В-третьих даже если было бы и так, тест IQ проверяет вполне конкретную вещь — способность быстро и эффективно оперировать с определенными абстрактными объектами. Меж тем, способность делать научные открытия зависит не только от этого, а от способности всесторонне исследовать проблему, найти нестандартный подход и т.д.
2. «У того чела высокий IQ, а он работает дворником» — а кто вообще сказал, что жизненный успех определяется интеллектом? Разумеется это не так. Не менее большую роль играет еще куча факторов, среди которых характер, воля, мотивация, связи, случай в конце концов.
А если продавец в магазине откажется продать вам вещь ( неважно по какой причине), вы придете ночью и украдете ее?