
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
27.01.2014, 11:34:12
|
|||
|---|---|---|---|
оптимизация процедуры |
|||
|
#18+
Добрый день всем, подскажите пожалуйста есть процедурка(упрощенна для наглядности): Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. но execute procedure UPDATE_test_data('test1%'); выполняется в течении 2-3мин, хотя отдельно: DELETE FROM test_table2 t WHERE t.fcompare LIKE 'test1%' ; INSERT INTO test_table2 SELECT Field1, COUNT(*) AS cnt, SUM(Field2) AS fsum FROM Test_table1 t WHERE t.fcompare LIKE 'test1%' GROUP BY Field1 PLAN SORT ((T INDEX (T_my_test_IDX1))); выполняется не более 2сек.! проблема в том что в процедуре почему то не используется индекс, при попытке его задать явно получаю ошибку "index cannot be used in the specified plan" подскажите как поправить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.01.2014, 11:43:03
|
|||
|---|---|---|---|
оптимизация процедуры |
|||
|
#18+
Ну наверное в первом случае Код: sql 1. никто не знает что там будет в p_fcompare а во втором Код: sql 1. эквивалентно Код: sql 1. что ясно с самого начала ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.01.2014, 11:48:44
|
|||
|---|---|---|---|
оптимизация процедуры |
|||
|
#18+
>m7m в том то и дело что тут может быть и '%testdata' и 'testdata%' и всяко разно, нельзя ли перестраивать план перед выполнением процедуры/запроса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.01.2014, 12:27:49
|
|||
|---|---|---|---|
|
|||
оптимизация процедуры |
|||
|
#18+
zloyGamerв том то и дело что тут может быть и '%testdata' и 'testdata%' и всяко разно, нельзя ли перестраивать план перед выполнением процедуры/запроса?нельзя: план генерится сразу. Сделайте if-else с предварит. анализом на отсутствие '%' в начале p_fcompare (если "%" нет, то идём по ветке с where t.fcompare starting with :p_fcompare, иначе по like). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
29.01.2014, 09:07:48
|
|||
|---|---|---|---|
оптимизация процедуры |
|||
|
#18+
спасибо, но этот вариант не очень нравится.., можно ли как то в самом запросе что то сделать? может типа case или что то похожее INSERT INTO test_table2 SELECT Field1, COUNT(*) AS cnt, SUM(Field2) AS fsum FROM Test_table1 t WHERE t.fcompare LIKE :p_fcompare GROUP BY Field1 ; дело в том что сам запрос на вставку не маленький ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=40&tablet=1&tid=1563936]: |
0ms |
get settings: |
6ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
181ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 203ms |
| total: | 465ms |

| 0 / 0 |
