|
|
|
Prepare в plpgsql - нужен или нет?
|
|||
|---|---|---|---|
|
#18+
Читал книжку по ораклу. Решил проверить то же самое в Postgre. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Результаты: а. Запросы 1 и 2 выполнились за одинаковое время б. Запрос 3 (insert_fast2) не выполняется (на основании якобы того, что в plpgsql все операторы проходят прекомпиляцию, что явно противоречит с результатом п. а) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2013, 22:03:24 |
|
||
|
Prepare в plpgsql - нужен или нет?
|
|||
|---|---|---|---|
|
#18+
На всякий случай: одинаковое время - это 10 секунд, что чуть больше чем <Self_censored>. При том что в случае препарации ожидались времена в миллисекунды. И в этом большое несчастье. Что я не понимаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2013, 22:07:21 |
|
||
|
Prepare в plpgsql - нужен или нет?
|
|||
|---|---|---|---|
|
#18+
Hawkmoon, http://www.postgresql.org/docs/9.2/static/sql-prepare.html и http://www.postgresql.org/docs/9.3/static/plpgsql-overview.html 40.1.1. Advantages of Using PL/pgSQL внутри обычного плпгсикуеля уже планы, которые строятся при первом вызове функции внутри сессии ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2013, 23:16:46 |
|
||
|
Prepare в plpgsql - нужен или нет?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2013, 23:18:46 |
|
||
|
Prepare в plpgsql - нужен или нет?
|
|||
|---|---|---|---|
|
#18+
Misha Tyurin, За ссылки спасибо, почитаю. Но т.к. много буков - только на выходных. Вопрос не снимается - аналогичная операция на Oracle занимает 100 миллисек или 10 сек, в зависимости от того, используем параметр или конкатенируем выражение. Аргументируется это тем, что в случае подстановок не надо заново компилировать разбор. Поэтому, чисто по экспериментальным данным в PG (10 сек vs 10 сек), возникает предположение, что компиляция в pgplsql происходит всегда. Проверить это предположение не смог, т.к. не разобрался, как сделать аналог средствами чистого SQL: сначала PREPARE t_plan (int) AS ... А затем EXECUTE t_plan, но в сочетание с generate_series. Думал час, тыкался, без эффекта - ничего не сконструировал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2013, 13:18:09 |
|
||
|
Prepare в plpgsql - нужен или нет?
|
|||
|---|---|---|---|
|
#18+
Hawkmoon, а чем собственно не устраивает просто Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. и план кешироваться будет нормально и время работы (у меня) 450ms ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2013, 14:11:44 |
|
||
|
Prepare в plpgsql - нужен или нет?
|
|||
|---|---|---|---|
|
#18+
Maxim Boguk, Непонятно, происходит препарация (компиляция т.е.) запроса или нет: Потому как Код: sql 1. гарантированно идет без препараций (хотя бы потому, что тексты запросов каждый раз новые) и при этом Код: sql 1. идет за то же самое время. Я понял замечание про INSERT INTO t(x) VALUES(i) но хотелось бы разобраться именно с execute'ом и $1. Вопрос принципиальный. Продолжу числа 2-го. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2013, 15:22:21 |
|
||
|
Prepare в plpgsql - нужен или нет?
|
|||
|---|---|---|---|
|
#18+
Hawkmoon, execute в pl/pgsql ВСЕГДА парсится вне зависимости от того используте вы USGING или нет и обойти это ограничение фактически не возможно (и в доке об этом явно и однозначно написано). execute - last restort measure для тех случаев когда по другому никак вообще (динамические запросы) выполнять через execute статические запросы не надо никогда и ни в каком случае ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2013, 16:17:34 |
|
||
|
Prepare в plpgsql - нужен или нет?
|
|||
|---|---|---|---|
|
#18+
Maxim BogukHawkmoon, execute в pl/pgsql ВСЕГДА парсится вне зависимости от того используте вы USGING или нет и обойти это ограничение фактически не возможно (и в доке об этом явно и однозначно написано). execute - last restort measure для тех случаев когда по другому никак вообще (динамические запросы) выполнять через execute статические запросы не надо никогда и ни в каком случае Насколько я помню, EXECUTE USING ввели как раз по многочисленным просьбам инвалидировать планы запросов, против чего был Tom. В итоге ввели как компромисное решение. И это вовсе не last resort, а обычный use case, когда план запроса сильно зависит от входных параметров. Простые INSERT к этому случаю, понятное дело, не относятся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.01.2014, 19:20:23 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=38516282&tid=1998906]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
205ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 193ms |
| total: | 496ms |

| 0 / 0 |
