|
|
|
использование хранимых процедур
|
|||
|---|---|---|---|
|
#18+
хотел бы узнать какой прирост производительности дает использование хранимых процедур. интересует именно прирост скорости, про всякие вещи типа вынос кода и прочее я в курсе. просто интересно, насколько увеличивается скорость, может гдето есть сравнительные тесты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2009, 18:04 |
|
||
|
использование хранимых процедур
|
|||
|---|---|---|---|
|
#18+
По сравнению с чем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2009, 18:10 |
|
||
|
использование хранимых процедур
|
|||
|---|---|---|---|
|
#18+
если исходить из чисто теоретических предпосылок - хранимые процедуры должны быть всегда быстрее. конкретный процент зависит от многих факторов, в т.ч. от СУБД :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2009, 18:31 |
|
||
|
использование хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Денис Ильин, хочется для каждой субд, наподобие таблицы. название субд и процент прироста скорости для каждой записи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2009, 18:38 |
|
||
|
использование хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Денис Ильин если исходить из чисто теоретических предпосылок - хранимые процедуры должны быть всегда быстрее. А нельзя ли эти "теоретические предпосылки" огласить?.. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2009, 18:52 |
|
||
|
использование хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Денис Ильинесли исходить из чисто теоретических предпосылок - хранимые процедуры должны быть всегда быстрее. конкретный процент зависит от многих факторов, в т.ч. от СУБД :)Опять же, по сравнению с чем? По сравнению с SQL-запросами - нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2009, 18:54 |
|
||
|
использование хранимых процедур
|
|||
|---|---|---|---|
|
#18+
miksoftДенис Ильинесли исходить из чисто теоретических предпосылок - хранимые процедуры должны быть всегда быстрее. конкретный процент зависит от многих факторов, в т.ч. от СУБД :)Опять же, по сравнению с чем? По сравнению с SQL-запросами - нет. имеется ввиду что запрос к базе данных оформляется в виде хранимой процедуры и вызывается из кода или же запрос выполняется в приложении (т.е. тело запроса находится в самой программе) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2009, 19:04 |
|
||
|
использование хранимых процедур
|
|||
|---|---|---|---|
|
#18+
гуня хочется для каждой субд, наподобие таблицы. название субд и процент прироста скорости для каждой записи Обломись. Те СУБД, которые вообще имеют хранимые процедуры используют их совершенно разными способами. А уж "прирост скорости для каждой записи" это вообще перл. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2009, 19:08 |
|
||
|
использование хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, так не важно каким способом, главное это то что если не использются процедуры то время одно, а когда используется время другое. вот интересно сильно ли будут отличия ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2009, 19:18 |
|
||
|
использование хранимых процедур
|
|||
|---|---|---|---|
|
#18+
А нельзя ли эти "теоретические предпосылки" огласить?.. ну как же - не тратится время на разбор SQL выражени, и т.п., например :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2009, 19:24 |
|
||
|
использование хранимых процедур
|
|||
|---|---|---|---|
|
#18+
хочется для каждой субд, наподобие таблицы. название субд и процент прироста скорости для каждой записи уу.. как всё запущенно :) ну, ... если у кого то есть пара-тройка месяцев свободного времени, то мне тоже было бы (чисто теоретический интерес) интересно поглядеть на такую :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2009, 19:26 |
|
||
|
использование хранимых процедур
|
|||
|---|---|---|---|
|
#18+
ДИну как же - не тратится время на разбор SQL выражени, и т.п., например :) чешуя. хотите Вы или нет, запрос не может выполниться каким-то волшебным образом в одном случае, и неволшебным - в другом. Сервер всегда парсит sql, пришел он с клиента или выполняется в процедуре на сервере. С точки зрения выполнения запросов абсолютно до лампы, с клиента они передаются на сервер или берутся сервером из процедуры. Другое дело - обработка записей. Понятно что выполнить запрос, передать данные на клиента, обработать, и вернуть обратно будет гораздо дольше чем выполнить процедуру, которая все то же самое делает на сервере. Но процедура будет быстрее только потому, что нет пересылки данных на клиента и обратно. Т.е. нет сетевого трафика, только и всего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2009, 20:32 |
|
||
|
использование хранимых процедур
|
|||
|---|---|---|---|
|
#18+
резюмирую гуне: Если выполнить select count, с клиента или в процедуре, время выполнения будет абсолютно одинаковым. Советую еще раз подумать, что с чем Вы пытаетесь сравнить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2009, 20:35 |
|
||
|
использование хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Сервер всегда парсит sql, пришел он с клиента или выполняется в процедуре на сервере. может файрбёрд и парсит, но sql server компилирует в момент первого выполнения (составляет план запроса, ищет подходящие индексы и т.д.). После этого "использует свои предыдущие наработки" :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2009, 21:38 |
|
||
|
использование хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Если выполнить select count, с клиента или в процедуре, время выполнения будет абсолютно одинаковым. это точно. O(n) всегда будет работать за O(n). использование хранимых процедур почти всегда оправданно, прежде всего из соображений безопасности, а не скорости. Если парсить sql код пришедший от клиента, то это чревато sql инъекциями. Решение без разбора клиентского sql кода от подобных инъекций защищено практически на 100%. +можно гибко раздавать права на таблицы (точнее - вообще их не давать, давать права только на хранимые процедуры). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2009, 21:43 |
|
||
|
использование хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Денис Ильин Сервер всегда парсит sql, пришел он с клиента или выполняется в процедуре на сервере. может файрбёрд и парсит, но sql server компилирует в момент первого выполнения (составляет план запроса, ищет подходящие индексы и т.д.). После этого "использует свои предыдущие наработки" :)KDV говорил не об этом. Сам скажет о чём :) Я же хочу уточнить насчёт FB vs MSSQL. FB таки строит план выполнения в момент загрузки процедуры в кеш метаданных. Причём полный план, для всех запросов процедуры. А вот MSSQL "умничает" - смотрит на значения параметров и может скомпилировать далеко не всё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2009, 21:48 |
|
||
|
использование хранимых процедур
|
|||
|---|---|---|---|
|
#18+
гуня пишет: > хотел бы узнать какой прирост производительности дает использование > хранимых процедур. Это зависит очень сильно от конкретной СУБД и того, как там реализованы процедуры. Без конкретной СУБД обсуждать это бессмысленно. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2009, 22:30 |
|
||
|
использование хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Денис Ильин но sql server компилирует в момент первого выполнения (составляет план запроса, ищет подходящие индексы и т.д.). После этого "использует свои предыдущие наработки" :) Ооооо... А догадывается он о том, что новый поступивший запрос соответствует этим "предыдущим наработкам" не иначе как телепатически. Хотя, что там ему составлять-то, с его rule-based оптимизатором... Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2009, 22:31 |
|
||
|
использование хранимых процедур
|
|||
|---|---|---|---|
|
#18+
ДИможет файрбёрд и парсит, но sql server компилирует в момент первого выполнения (составляет план запроса, ищет подходящие индексы и т.д.). После этого "использует свои предыдущие наработки" ну и какая разница? допустим, запрос "первый раз" пришел с клиента, и тот же запрос первый раз выполняется в хранимой процедуре. Что, MS SQL не будет его "парсить"??? ДИЕсли парсить sql код пришедший от клиента, то это чревато sql инъекциями. весьма сомнительное утверждение. Возможно, Вы под "парсить" имеете в виду что-то отличное от проверки корректности пришедшего с клиента SQL, и т.д. Можно и процедуру написать так, что в ней тоже будут возможны sql-injections. Так что про них тут, на мой взгляд, не в кассу. В контексте вопроса автора я бы эту тему не развивал. hvladА вот MSSQL "умничает" - смотрит на значения параметров и может скомпилировать далеко не всё. тем не менее, возможно моя информация устарела, но раньше были жалобы, что в MS SQL процедуры выполняются медленно. И были вопросы, "а в ФБ тоже процедуры выполняются медленнее, чем SQL?". И все-таки, я ставлю на то, что автор вопроса спрашивает именно о более быстрой обработке данных процедурами на сервере, в отличие от комбинированной обработки данных клиент+сервер+клиент. Здесь все равно, MS SQL препарит все запросы в процедуре, или не все. p.s. в любом случае, сам вопрос хреновый. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2009, 22:52 |
|
||
|
использование хранимых процедур
|
|||
|---|---|---|---|
|
#18+
весьма сомнительное утверждение. Возможно, Вы под "парсить" имеете в виду что-то отличное от проверки корректности пришедшего с клиента SQL, и т.д. ну, и т.д. - проверка прав к таблицам, из которых идёт выборка, посторение и кеширование плана запроса, и т.д., этапов много. тем не менее, возможно моя информация устарела, но раньше были жалобы, что в MS SQL процедуры выполняются медленно. И были вопросы, "а в ФБ тоже процедуры выполняются медленнее, чем SQL?". видимо, это было как то слишком давно. я такого никогда не замечал :) Ооооо... А догадывается он о том, что новый поступивший запрос соответствует этим "предыдущим наработкам" не иначе как телепатически. в смысле? хранимая процедурка то таже самая? все правильные индексы уже выбранны. иногда статистика хромает, но её то можно собрать заново :yes: Можно и процедуру написать так, что в ней тоже будут возможны sql-injections. да, это правда. если использовать динамический SQL. но этот вариант практически не использует какие либо преимущества хранимых процедур :) поэтому когда я вижу динамический SQL, я прошу его переписать по человечески. Потому что негоже это. кстати, я так чувствую, сами ответы показывают, насколько разные они, хранимые процедуры, в разных RDBSM. Не факт что сравнение будет имет хоть какую то корректность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2009, 23:20 |
|
||
|
использование хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Хотя, что там ему составлять-то, с его rule-based оптимизатором... А можно с этого места немного поподробнее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2009, 01:04 |
|
||
|
использование хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Денис Ильинесли исходить из чисто теоретических предпосылок - хранимые процедуры должны быть всегда быстрее. конкретный процент зависит от многих факторов, в т.ч. от СУБД :) Это неправда. Как раз потому неправда, что в процедуре используется план выполнения, который был создан в момент первого запуска до очередной перекомпиляции, которая может случиться нескоро. Например, в процедуре выборка из таблицы по битовому полю, причём значение отбора передаётся через параметр процедуры. В этом поле, допустим, значение 1 - это 0.1 процент данных, остальные 99.9 - это значение 0. Пусть есть индекс по этому полю. Если впервые запустить процедуру с параметром, равным 0, то в качестве плана будет полный скан таблицы, и он сохранится до перекомпиляции процедуры. Если же выбрку делать обычным запросом, то всё будет ок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2009, 01:20 |
|
||
|
использование хранимых процедур
|
|||
|---|---|---|---|
|
#18+
AlbatrossДенис Ильинесли исходить из чисто теоретических предпосылок - хранимые процедуры должны быть всегда быстрее. конкретный процент зависит от многих факторов, в т.ч. от СУБД :) Это неправда. Как раз потому неправда, что в процедуре используется план выполнения, который был создан в момент первого запуска до очередной перекомпиляции, которая может случиться нескоро. Например, в процедуре выборка из таблицы по битовому полю, причём значение отбора передаётся через параметр процедуры. В этом поле, допустим, значение 1 - это 0.1 процент данных, остальные 99.9 - это значение 0. Пусть есть индекс по этому полю. Если впервые запустить процедуру с параметром, равным 0, то в качестве плана будет полный скан таблицы, и он сохранится до перекомпиляции процедуры. Если же выбрку делать обычным запросом, то всё будет ок.В MS SQL появились индексы по битовым полям? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2009, 01:37 |
|
||
|
использование хранимых процедур
|
|||
|---|---|---|---|
|
#18+
SergSuperВ MS SQL появились индексы по битовым полям? Давненько, а что? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2009, 01:46 |
|
||
|
|

start [/forum/topic.php?fid=35&msg=36270639&tid=1552871]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
46ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
| others: | 14ms |
| total: | 163ms |

| 0 / 0 |
