![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 16 Всего: 151 |
Не понял я твою мысль, ну да ладно. Не существенно.
-------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
| Sun |
|
|||
|
Account removed ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1611 Регистрация: 14.8.2002 Репутация: 2 Всего: 48 |
А у меня гораздо больше сомнений вызывает что переданный извне запрос будет выполняться быстрей чем в теле процедуры. Допускаю что в лучшем случае скорость будет одинаковой. У вас есть какие-нибудь материалы доказывающие вашу теорию? Интересно было бы почитать. -------------------- Account removed |
|||
|
||||
| 3x3 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 261 Регистрация: 17.9.2006 Репутация: 5 Всего: 8 |
А вы не обратили внимания, что в посте, из которого вы процитировали одну фразу, присутствует ещё некая совокупность букв, посвященная раскрытию темы - почему именно я не поверю? Это сообщение отредактировал(а) 3x3 - 2.10.2006, 15:10 -------------------- Зачем платить больше, когда можно заплатить дважды? |
|||
|
||||
| Sun |
|
|||
|
Account removed ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1611 Регистрация: 14.8.2002 Репутация: 2 Всего: 48 |
Я внимательнейшим образом изучил данный метериал, но так и не понял почему если оптимизатор запускается при простом выполнении запроса, он точно также не запускается при выполнении этого же запроса в теле процедуры? Это сделано специально чтобы понизить эффективность хранимых процедур? -------------------- Account removed |
|||
|
||||
| 3x3 |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 261 Регистрация: 17.9.2006 Репутация: 5 Всего: 8 |
Хм.. Я в свою очередь не понимаю, как вы себе представляете работу оптимизатора в случае, если запрос, приведенный мною в качестве примера, будет подбирать ID стран и континентов посредством вызова функций:
Как вы ему предложите ЭТО оптимизировать? Он просто станет вызывать эти функции для всех семи миллиардов землян и шерстить в них страны и континенты. -------------------- Зачем платить больше, когда можно заплатить дважды? |
||||||
|
|||||||
| Sun |
|
|||
|
Account removed ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1611 Регистрация: 14.8.2002 Репутация: 2 Всего: 48 |
Ну в процедурах есть параметры, которые я укажу в данном селекте. Соотвественно когда будет выполняться селект с указанными параметрами, будет вызываться и оптимизатор, точно также как и при вызове запроса извне. Разве не так? Или я что-то недопонял? -------------------- Account removed |
|||
|
||||
| 3x3 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 261 Регистрация: 17.9.2006 Репутация: 5 Всего: 8 |
Продолжая наш пример: В мире живёт примерно 7 миллиардов человек (ну, миллиард туда, миллиард сюда - не принципиально). Население Австралии - что-то около 20 миллионов, что составляет 0.3% от общего количества людей. В среднем же селективность индекса по странам, которых 200 = 0.5%, очень хорошая избирательность, проиндексируем персон по стране. Соответственно оптимизатор знает какие существуют индексы (в жизни он ещё оценивает и сколько стоит по ним ходить, ведь данные разреживаются с годами: кто-то мрёт, кто-то наоборот). И когда мы просим SQL-engine: "дай нам всех мужиков с австралийского континента" она в состоянии решить что правильнее: перебирать семь миллиардов записей персон или 6 континентов, 34 страны (в среднем на континент) и двадцать миллионов персон. Но стоит вам сказать SQL-engine: "дай нам всех мужиков, у которых ID страны, совпадёт с ID, которой вернет фукция вызванная для этой записи" - и всё. БД пойдёт перебирать миллиарды землян и для каждого вызывать функцию и проверять - совпадает ли возвращенный ID с тем, что забито в записи этого пользователя. ЗЫ Не без исключений, конечно. В частности при выборке по Азии будет скорее всего выгоднее ходить по персонам: одних китайцев - каждый пятый, какой блок с диска ни считаешь - не ошибёшься, в нём уже китаец сидеть будет -------------------- Зачем платить больше, когда можно заплатить дважды? |
||||
|
|||||
| Sun |
|
|||
|
Account removed ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1611 Регистрация: 14.8.2002 Репутация: 2 Всего: 48 |
Можно все-таки пример на SQL, а то с такими яыком запросов который приводите вы я не знаком -------------------- Account removed |
|||
|
||||
| 3x3 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 261 Регистрация: 17.9.2006 Репутация: 5 Всего: 8 |
На SQL было в предшествующих постах, а это перевод выражения на русский язык А про джаву - забудьте. Совершенно непринципиально через какой API вы будете дергать лисэнер БД. Это базу не волнует и на её скорость не влияет. -------------------- Зачем платить больше, когда можно заплатить дважды? |
||||
|
|||||
| Sun |
|
||||
|
Account removed ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1611 Регистрация: 14.8.2002 Репутация: 2 Всего: 48 |
Ладно, будем абстрагироваться. У нас есть один и тотже SQL запрос со следующими параметрами
В одном случае мы вызываем его в теле хранимой процедуры, во втором извне, через API предоставляемое сервером баз данных, либо через поставляемую вместе с ним утилиту. Теперь можно узнать - почему при запуске SQL запроса из хранимой процедуры оптимизатор запускаться не будет, а во втором случае будет? -------------------- Account removed |
||||
|
|||||
| 3x3 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 261 Регистрация: 17.9.2006 Репутация: 5 Всего: 8 |
1. Оптимизатор будет вызываться всегда, какой бы вы ему запрос не скормили (оставим за скобками оракловые особенности)
2. Разницы в том, как будет выполняться целый запрос: из хранимой процедуры или из вью или из клиента пришедши - естественно, практически нет. -------------------- Зачем платить больше, когда можно заплатить дважды? |
|||
|
||||
| Sun |
|
|||
|
Account removed ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1611 Регистрация: 14.8.2002 Репутация: 2 Всего: 48 |
3x3, ну если разницы нет, почему же вы утверждаете что хранимые процедуры менее эффективны по производительности, чем внешние вызовы? Только потому что требуется проверка прав доступа? Время на инициализацию?
-------------------- Account removed |
|||
|
||||
| 3x3 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 261 Регистрация: 17.9.2006 Репутация: 5 Всего: 8 |
Это вы так интерпретировали моё высказывание: "Никогда в жизни не поверю, что вызов процедуры может ускорить запрос" или можете привести ссылку на высказывание о том, "что хранимые процедуры менее эффективны по производительности, чем внешние вызовы"? -------------------- Зачем платить больше, когда можно заплатить дважды? |
|||
|
||||
| Sun |
|
||||||
|
Account removed ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1611 Регистрация: 14.8.2002 Репутация: 2 Всего: 48 |
Запросто
-------------------- Account removed |
||||||
|
|||||||
| 3x3 |
|
||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 261 Регистрация: 17.9.2006 Репутация: 5 Всего: 8 |
Хорошо. Я по-прежнему не вижу ссылку на высказывание о том, "что хранимые процедуры менее эффективны по производительности, чем внешние вызовы" (и уверен, что такого не говорил, поскольку не понимаю смысл текста взятого в кавычки), а вот отквоченное вами можно обсудить. Начнём. С чем из отквоченного вами вы лично не согласны и почему? -------------------- Зачем платить больше, когда можно заплатить дважды? |
||||||||
|
|||||||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |