|
|
|
Оптимизация функции
|
|||
|---|---|---|---|
|
#18+
Добрый день. Помогите, пожалуйста, максимально оптимизировать функцию по времени выполнения. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2015, 08:44 |
|
||
|
Оптимизация функции
|
|||
|---|---|---|---|
|
#18+
I00NДобрый день. Помогите, пожалуйста, максимально оптимизировать функцию по времени выполнения. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. а зачем сосбтвенно? Она не должна тормозить заметно так как ни к чему конкретно не обращается. В принципе быстрее будет если ее в 1 строку написать вместо кучи переменных так как pl/pgsql интерпретатор и выполняет ваш код построчно. Но особо вы на этом не выйграете ничего (малые доли миллисекунд в лучшем случае). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2015, 09:51 |
|
||
|
Оптимизация функции
|
|||
|---|---|---|---|
|
#18+
I00N, а сколько времени она сейчас отрабатывает и сколько надо? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. у меня получается 0.038-0.045ms за вызов. с NOW() вместо clock_timestamp примерно так же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2015, 10:01 |
|
||
|
Оптимизация функции
|
|||
|---|---|---|---|
|
#18+
Хочется выжать максимум из функции. Сейчас: Код: sql 1. 2. 3. После записи функции в одну строку стало гораздо быстрее: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. Код: sql 1. 2. 3. Я мало знаком с PostgreSQL. Нормально ли написана данная функция? Есть ли что еще можно ускорить? И еще вопрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2015, 16:29 |
|
||
|
Оптимизация функции
|
|||
|---|---|---|---|
|
#18+
I00NХочется выжать максимум из функции. Сейчас: Код: sql 1. 2. 3. После записи функции в одну строку стало гораздо быстрее: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. Код: sql 1. 2. 3. Я мало знаком с PostgreSQL. Нормально ли написана данная функция? Есть ли что еще можно ускорить? И еще вопрос. еще чуть быстрее - отказаться от переменных our_epoch constant bigint := 1314220021721; shard_id constant smallint := 5; и вставить их в выражение явно. Дальше уже начинает играть роль overhead на запуск самого pl/pgsql. Потестируйте пустую функцию на скорость... вот быстрее чем это можно только на С написать. --Maxim Boguk www.postgresql-consulting.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2015, 17:34 |
|
||
|
Оптимизация функции
|
|||
|---|---|---|---|
|
#18+
I00N, Попробуйте сделать PL/SQL функцию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2015, 17:37 |
|
||
|
Оптимизация функции
|
|||
|---|---|---|---|
|
#18+
vyegorovI00N, Попробуйте сделать PL/SQL функцию. Что Вы имеете ввиду учитывая, что PL/SQL - это процедурный язык в Oracle. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2015, 21:25 |
|
||
|
Оптимизация функции
|
|||
|---|---|---|---|
|
#18+
Maxim Boguk, Благодарю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2015, 21:26 |
|
||
|
Оптимизация функции
|
|||
|---|---|---|---|
|
#18+
I00NvyegorovI00N, Попробуйте сделать PL/SQL функцию. Что Вы имеете ввиду учитывая, что PL/SQL - это процедурный язык в Oracle. Простите, некорректно сформулировал. Оракловский PL/SQL я не знаю и потому для меня эта аббревиатура ассоциируется только с Postgres'ом. Если есть возможность выразить ваш преобразования на чистом SQL, то используйте функции на языке SQL . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2015, 01:00 |
|
||
|
Оптимизация функции
|
|||
|---|---|---|---|
|
#18+
vyegorov, Благодарю, ускорилось в разы после переписывание на: Код: plsql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2015, 15:42 |
|
||
|
Оптимизация функции
|
|||
|---|---|---|---|
|
#18+
Помогите, пожалуйста, максимально оптимизировать функцию по времени выполнения. CREATE OR REPLACE FUNCTION public.graph_calculatepath ( graphtype public.graphtype, source integer, target integer, prohibited public.geometry, band public.geometry, pathtype public.pathtype ) RETURNS SETOF public.pathedge AS $body$ DECLARE sql TEXT; algo TEXT; point INTEGER; seq INTEGER; pathedge public.pathedge; edges TEXT = lower(graphtype::TEXT) || '.edges'; addedges TEXT = lower(graphtype::TEXT) || '_addedges'; deledges TEXT = lower(graphtype::TEXT) || '_deledges'; delnodes TEXT = lower(graphtype::TEXT) || '_delnodes'; BEGIN IF (source != 0) AND (target != 0) AND (source != target) THEN algo := graph_casepathsalgorithm(pathtype); -- Shortest path query sql := 'SELECT paths.seq, edges.* ' ||'FROM '|| algo ||' (''SELECT * FROM (SELECT * FROM ' || addedges ||' UNION ALL SELECT * FROM ' || edges || ') AS graph ' ||'WHERE id NOT IN (SELECT gid FROM ' || deledges || ') ' || 'AND source NOT IN (SELECT gid FROM ' || delnodes || ') ' || 'AND target NOT IN (SELECT gid FROM ' || delnodes || ') ' || CASE WHEN prohibited IS NOT NULL THEN 'AND NOT st_intersects(the_geom, ' || 'geomfromewkt('''||quote_literal(st_asewkt(prohibited))||''')) ' ELSE '' END || CASE WHEN band IS NOT NULL THEN 'AND st_intersects(the_geom, ' || 'geomfromewkt('''||quote_literal(st_asewkt(band))||''')) ' ELSE '' END ||''', ' || source || ', ' || target ||', false, false) AS paths, ' ||'(SELECT * FROM ' || addedges ||' UNION ALL SELECT * FROM ' || edges || ') AS edges ' ||'WHERE paths.id2 = edges.id ' ||'ORDER BY seq;'; -- Remember start point point := source; seq := 0; BEGIN FOR pathedge IN EXECUTE sql LOOP -- Flip geometry (if required) IF ( point != pathedge.source ) THEN pathedge.the_geom := st_reverse(pathedge.the_geom); point := pathedge.source; pathedge.source := pathedge.target; pathedge.target := point; ELSE point := pathedge.target; END IF; -- Return record pathedge.seq := seq; RETURN NEXT pathedge; seq := seq + 1; END LOOP; -- FOR pathedge IN EXECUTE sql EXCEPTION WHEN OTHERS THEN RAISE NOTICE '%: graph_calculatepath: PATH NOT FOUND!', upper(pathtype::TEXT); RAISE NOTICE 'NUM: %, DETAILS: %', SQLSTATE, SQLERRM; RETURN; END; END IF; -- IF (source != 0) AND (target != 0) THEN RETURN; END; $body$ LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER COST 100 ROWS 1000; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2015, 10:14 |
|
||
|
Оптимизация функции
|
|||
|---|---|---|---|
|
#18+
Помогите, пожалуйста, максимально оптимизировать функцию по времени выполнения. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2015, 10:29 |
|
||
|
|

start [/forum/topic.php?fid=53&tid=1998057]: |
0ms |
get settings: |
14ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 233ms |
| total: | 364ms |

| 0 / 0 |
