powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Один сложный запрос или десять простых?
8 сообщений из 8, страница 1 из 1
Один сложный запрос или десять простых?
    #35808198
askfinder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не имея достаточного опыта в DB2 интересно узнать мнение людей, имеющих опыт. Понимаю относительность ситуации (наличие ключей, связей и т.д.), но какова общая рекомендация (если таковая вообще может быть) с точки зрения производительности в случае когда имеется альтернатива: для внесения множества изменений в таблицу/таблицы использовать один "сложный" составной SQL-запрос или предварительно выбрать требуемый набор данных в курсор и многократно выполнить простые обновления? Чему следует отдавать предпочтение (в самом общем случае - общая стратегия, так сказать) в DB2?
...
Рейтинг: 0 / 0
Один сложный запрос или десять простых?
    #35808961
Favn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем случае для DB2, и не только - декларативность (один запрос) гораздо предпочтительней процедурности (курсор-цикл-постые изменения), так как дает гораздо больше возможностей оптимизатору. В DB2 при выполнении запроса он с начала собирается в единый текст со всеми view и UDF на SQL, затем оптимизатор пытается его оптимально переформулировать (в зависимости от уровня оптимизации).
Процедура лишает бедного оптимизатора его работы :)
...
Рейтинг: 0 / 0
Один сложный запрос или десять простых?
    #35809091
Фотография I_love_MSDN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Favn, т.е. если на клиенте формируется один большой запрос на изменение данных таблицы, или 10 маленьких, которые отправляются поочередно, и изменяют по 1 записи - то в данном случае лучше одним большим (т.е. 1 вариант)? Или вы имели ввиду процедуру сохраненную?
- Абсолют' ный
-посковый робот по MSDN для
- ленивых
...
Рейтинг: 0 / 0
Один сложный запрос или десять простых?
    #35809134
Favn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
I_love_MSDNFavn, т.е. если на клиенте формируется один большой запрос на изменение данных таблицы, или 10 маленьких, которые отправляются поочередно, и изменяют по 1 записи - то в данном случае лучше одним большим (т.е. 1 вариант)? Или вы имели ввиду процедуру сохраненную?Писал, скорее, для идеального случая - локального коннекта. На удаленном клиенте все хуже многократно, т.к. удаленный курсор дольше держит блокировки, промежуточные запросы по сети болтаются и т.д.
Для SP надо еще учесть, что она компилируется один раз, и потом (по умолчанию) планы обновятся только при явном REBIND, что не есть минус, но надо учитывать при администрировании. План же динамического запроса будет переделан по необходимости.
В любом случае, как на клиенте, так и в процедуре, один большой запрос (типа MERGE) обычно выгоднее - все-таки в гордости IBM по поводу оптимизатора DB2 есть рациональное зерно :)
...
Рейтинг: 0 / 0
Один сложный запрос или десять простых?
    #35809154
Фотография I_love_MSDN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То есть один большой запрос лучше. Спасибо!
- Абсолют' ный
-посковый робот по MSDN для
- ленивых
...
Рейтинг: 0 / 0
Один сложный запрос или десять простых?
    #35809590
askfinder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[/quot]Для SP надо еще учесть, что она компилируется один раз, и потом (по умолчанию) планы обновятся только при явном REBIND, что не есть минус, но надо учитывать при администрировании.[/quot]

А можно уточнить? В частности мне известно, что в случае использования CLI именно так и происходит. А вот что происходит при вызове SQL-хранимой процедуры из внешнего клиента по JDBC (Java или EJB на J2EE-сервере)? Т.е. можно ли считать, что вне зависимости от типа SP (SQL PL, C или JAVA) и варианта ее вызова план строится (по дефолту) только однажды. Если Да, то каким образом я могу обновить план SP (интересует именно SQL PL процедура) в моем случае?
...
Рейтинг: 0 / 0
Один сложный запрос или десять простых?
    #35810918
Favn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
askfinderВ частности мне известно, что в случае использования CLI именно так и происходит. А вот что происходит при вызове SQL-хранимой процедуры из внешнего клиента по JDBC (Java или EJB на J2EE-сервере)?
Т.е. можно ли считать, что вне зависимости от типа SP (SQL PL, C или JAVA) и варианта ее вызова план строится (по дефолту) только однажды. Если Да, то каким образом я могу обновить план SP (интересует именно SQL PL процедура) в моем случае?С CLI происходит не так - это динамический SQL, он компилируется "на лету", хотя для отдельных частых запросов и можно вручную создать статический package. Т.е. если динамический запрос ("запрос из строки") вызывается даже из SP - он выполняется динамичеки, т.к. текст запроса на момент компиляции package не известен.
BIND/REBINDприменимы к статическому SQL - embedded SQL в C, SQLJ в Java. Для SP на SQL-PL - целиком за исключением динамических запросов.
Для процедуры или приложения на C и Java со static SQL создается связанный с ним отдельный package. Для него можно явно сказать REBIND, указав при этом время формирования планов - при компиляции (по умолчанию), при первом запуске или каждый раз.
Для SP на SQL-PL package создается всегда - он и есть результат компиляции процедуры. Вместо команды BIND - собственно создание SP, вместо REBIND - сис. процедура SYSPROC.REBIND_ROUTINE_PACKAGE
При этом планы доступа формируются сразу.
Кстати, UDF на SQL-PL вообще не компилируются, а хранятся в исходном тексте, который подставляется in-line прямо в текст вызывающего запроса.
...
Рейтинг: 0 / 0
Один сложный запрос или десять простых?
    #35821977
askfinder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Favn
Для SP на SQL-PL package создается всегда - он и есть результат компиляции процедуры. Вместо команды BIND - собственно создание SP, вместо REBIND - сис. процедура SYSPROC.REBIND_ROUTINE_PACKAGE
При этом планы доступа формируются сразу.
Кстати, UDF на SQL-PL вообще не компилируются, а хранятся в исходном тексте, который подставляется in-line прямо в текст вызывающего запроса.
Спасибо, кое-что прояснилось.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Один сложный запрос или десять простых?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]