|
|
|
Как оптимизировать запрос?
|
|||
|---|---|---|---|
|
#18+
Добрый день! Есть запрос вида Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Т.е. основная таблица i_r, и три LEFT JOIN с другими таблицами. Посоветуйте, пожалуйста, как лучше оптимизировать запрос и как в этом случае использовать индексы? Таблицы i, i_r содержат большое количество записей и записи все время добавляются. Таблицы t, a более-менее постоянны, изменяются редко, записей мало. Запрос используется очень часто. Результат EXPLAIN ANALYZE: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2014, 15:20:19 |
|
||
|
Как оптимизировать запрос?
|
|||
|---|---|---|---|
|
#18+
mdlv, а можно нормальный запрос с ddl и примером данных? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2014, 15:39:01 |
|
||
|
Как оптимизировать запрос?
|
|||
|---|---|---|---|
|
#18+
V&N mdlv, а можно нормальный запрос с ddl и примером данных? Да, конечно) Попытался максимально упростить. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Основная таблица Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. В запросе используется функция: Код: 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. А вот сам запрос Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. И вот результат только с этими таблицами и содержимым на новой базе: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2014, 18:09:47 |
|
||
|
Как оптимизировать запрос?
|
|||
|---|---|---|---|
|
#18+
Версия Postgresql 7.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2014, 19:16:35 |
|
||
|
Как оптимизировать запрос?
|
|||
|---|---|---|---|
|
#18+
mdlv, очень странная функция, без нее нельзя обойтись? или переписать хотя бы. выполнять запросы в цикле как-то неправильно, особенно во вложенном, особенно динамический sql. по explain непонятно сколько раз там внутри запрос вызывается. насколько большие массивы? да и версию бы обновить не помешало, в новых версиях куда проще наверняка можно это записать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2014, 20:30:53 |
|
||
|
Как оптимизировать запрос?
|
|||
|---|---|---|---|
|
#18+
mdlv, > 7.4 как так? 11 лет назад сняли с поддержки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2014, 21:41:00 |
|
||
|
Как оптимизировать запрос?
|
|||
|---|---|---|---|
|
#18+
mdlv, намудрили ... вникать облом, попробуйте так. Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2014, 05:39:47 |
|
||
|
Как оптимизировать запрос?
|
|||
|---|---|---|---|
|
#18+
Alexius, я бы и рад обновить, но вот такая ситуёвина, приходится работать именно с этой версией. Функция странная, согласен) Без нее побыстрее Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Это если вообще убрать из выборки Код: plsql 1. 2. 3. 4. 5. 6. 7. В примере выше в массиве было всего 2 элемента. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2014, 09:49:51 |
|
||
|
Как оптимизировать запрос?
|
|||
|---|---|---|---|
|
#18+
Misha Tyurinmdlv, > 7.4 как так? 11 лет назад сняли с поддержки Госсектор...)) Мы впереди планеты всей. Я бы и рад обновить, но, к сожалению, все завязано на этой версии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2014, 09:52:14 |
|
||
|
Как оптимизировать запрос?
|
|||
|---|---|---|---|
|
#18+
V&N mdlv, намудрили ... вникать облом, попробуйте так. Код: 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. Спасибо. Ваша функция куда дружелюбнее выглядит) К сожалению, быстрее работать не стало. Результат: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2014, 09:58:18 |
|
||
|
Как оптимизировать запрос?
|
|||
|---|---|---|---|
|
#18+
V&N, что-то проглючило, вот результат Код: 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. Так намного лучше, спасибо) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2014, 10:01:36 |
|
||
|
Как оптимизировать запрос?
|
|||
|---|---|---|---|
|
#18+
V&N, спасибо огромное Вам!!! Попробовал на реальной базе, уже стало 216 мс против 1442. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2014, 10:20:54 |
|
||
|
Как оптимизировать запрос?
|
|||
|---|---|---|---|
|
#18+
mdlv, я не знаю "назначения" массива, проанализируйте данные, важен ли порядок следования элементов, есть ли дубликаты, возможно функция не нужна и все можно свести к банальному i.items_id = ANY(items_reviews.items) ? Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2014, 11:40:17 |
|
||
|
Как оптимизировать запрос?
|
|||
|---|---|---|---|
|
#18+
V&N mdlv, я не знаю "назначения" массива, проанализируйте данные, важен ли порядок следования элементов, есть ли дубликаты, возможно функция не нужна и все можно свести к банальному i.items_id = ANY(items_reviews.items) ? Вы гений! Спасибо, да, можно свести к этому самому банальному) Дубликатов нет, порядок важен. Массив используется для вывода списка одной строкой, просто в виде текста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2014, 12:30:55 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=38769963&tid=1998444]: |
0ms |
get settings: |
8ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
5ms |
track hit: |
193ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 228ms |
| total: | 528ms |

| 0 / 0 |
