|
|
|
улучшить время выполнения
|
|||
|---|---|---|---|
|
#18+
best_time--поправилbest_time, SHOW random_page_cost ; ? 4это дефолт, если не вру тогда сразу всё прочее, как просит товарисч: select name,setting,source from pg_settings where name ~ '^autovacuum|cost|enable'; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 15:38:03 |
|
||
|
улучшить время выполнения
|
|||
|---|---|---|---|
|
#18+
vyegorovbest_timevyegorov, там 0 и NULL'ы - все равно важно? Хм, если там NULL-ы, то у меня вопросы: как статистики собираются в системе вообще? что выдаст такой запрос Код: sql 1. как изменится план после запуска следующих команд Код: sql 1. 2. 3. 4. 5. виноват - запускал на реплике. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. настройки: Код: plaintext 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. ANALYZE - сейчас запущу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 15:56:22 |
|
||
|
улучшить время выполнения
|
|||
|---|---|---|---|
|
#18+
best_time, сделайте, если не сложно Код: sql 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. -- интересно посмотреть на то, что придумает оптимизатор про rows cost и метод ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 16:05:32 |
|
||
|
улучшить время выполнения
|
|||
|---|---|---|---|
|
#18+
--поправил, Код: sql 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. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 16:26:01 |
|
||
|
улучшить время выполнения
|
|||
|---|---|---|---|
|
#18+
best_time, он таки упорствует Код: sql 1. а что , если вместо JOIN предложить ему агрегат от where exists (план должен быть похожий, ну а вдруг он устанет упорствовать ~пимерно так~ Код: sql 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 16:47:25 |
|
||
|
улучшить время выполнения
|
|||
|---|---|---|---|
|
#18+
--поправилbest_time, он таки упорствует Код: sql 1. а что , если вместо JOIN предложить ему агрегат от where exists (план должен быть похожий, ну а вдруг он устанет упорствовать ~пимерно так~ Код: sql 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. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 16:57:58 |
|
||
|
улучшить время выполнения
|
|||
|---|---|---|---|
|
#18+
--поправил, Может, вот так в угадайку поиграем: Код: sql 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 16:58:18 |
|
||
|
улучшить время выполнения
|
|||
|---|---|---|---|
|
#18+
/\/\/\/\/\/\, вот да, тоже интересно хотя планы не должны разниться с джойном чо ж оно так упирается ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 17:03:21 |
|
||
|
улучшить время выполнения
|
|||
|---|---|---|---|
|
#18+
/\/\/\/\/\/\, ЗЫ а корреляты кошерно таки прикручивать после агрегации, а не в процессе. так оно дешевле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 17:05:58 |
|
||
|
улучшить время выполнения
|
|||
|---|---|---|---|
|
#18+
--поправил, Я исхожу из того, что проще пробежаться по одной табличке и что-то отфильтровать, вместо того, чтобы что-то соединить по условию и потом все равно фильтровать. Достаточно часто бывает удачно. В моем варианте соединения быть не должно. Так, пара-тройка значений отобрана уже в память (где-то 100 значений) и больше не рассчитывается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 17:09:28 |
|
||
|
улучшить время выполнения
|
|||
|---|---|---|---|
|
#18+
--поправил/\/\/\/\/\/\, ЗЫ а корреляты кошерно таки прикручивать после агрегации, а не в процессе. так оно дешевле. Насколько я здесь вижу, они - часть условия агрегации. То есть все равно агрегация на последнем этапе должна быть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 17:11:44 |
|
||
|
улучшить время выполнения
|
|||
|---|---|---|---|
|
#18+
--поправилон таки упорствует Код: sql 1. а что , если вместо JOIN предложить ему агрегат от where exists (план должен быть похожий, ну а вдруг он устанет упорствовать ~пимерно так~ Оценки дикие конечно. Вот эта Код: sql 1. тоже непонятна. Оптимизатор выбирает проход по индексу при возврате 1М записей, что соответствует размеру всей таблицы. best_time, а покажите пожалуйста план для Код: sql 1. Вместе с вариантом `EXISTS` конечно же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 17:13:36 |
|
||
|
улучшить время выполнения
|
|||
|---|---|---|---|
|
#18+
/\/\/\/\/\/\--поправил, <> В моем варианте соединения быть не должно. Так, пара-тройка значений отобрана уже в память (где-то 100 значений) и больше не рассчитывается. у in в пж обычно план как у join , а у NOT IN -- как у ANTI JOIN (LEFT JOIN ...WHERE ...NULL) -- если не врёт память ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 17:14:23 |
|
||
|
улучшить время выполнения
|
|||
|---|---|---|---|
|
#18+
/\/\/\/\/\/\, Эм. Я пошел по формальному пути. Верю исходному запросу. А вообще да, эти поля можно прикрутить в последнюю очередь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 17:17:22 |
|
||
|
улучшить время выполнения
|
|||
|---|---|---|---|
|
#18+
/\/\/\/\/\/\--поправил, Может, вот так в угадайку поиграем: Код: sql 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. Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 17:18:45 |
|
||
|
улучшить время выполнения
|
|||
|---|---|---|---|
|
#18+
vyegorov <>Оценки дикие конечно. <>Оптимизатор выбирает проход по индексу при возврате 1М записей, что соответствует размеру всей таблицы. да единственное что напрашивается -- enable-ы и cost-ы получены не совсем в том сеансе, что вот эти вот планы. а в том, где планы -- там все несколько иначе выставлено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 17:19:54 |
|
||
|
улучшить время выполнения
|
|||
|---|---|---|---|
|
#18+
--поправил... обычно план... Когда "обычно" - проблем никаких. Не очень обращал внимание. А вот когда не обычно... Оптимизатор такие чудеса откаблучивает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 17:20:05 |
|
||
|
улучшить время выполнения
|
|||
|---|---|---|---|
|
#18+
vyegorov--поправилон таки упорствует Код: sql 1. а что , если вместо JOIN предложить ему агрегат от where exists (план должен быть похожий, ну а вдруг он устанет упорствовать ~пимерно так~ Оценки дикие конечно. Вот эта Код: sql 1. тоже непонятна. Оптимизатор выбирает проход по индексу при возврате 1М записей, что соответствует размеру всей таблицы. best_time, а покажите пожалуйста план для Код: sql 1. Вместе с вариантом `EXISTS` конечно же. Код: sql 1. Код: sql 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. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 17:22:03 |
|
||
|
улучшить время выполнения
|
|||
|---|---|---|---|
|
#18+
--поправил, а если тупо вписать otahotel_2014w32 вместо otahotel ? план не поменяется ? -- может быть он[, оптимайзер бишь 9.2.8,] аппендить при хешджойне не обучен ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 17:25:52 |
|
||
|
улучшить время выполнения
|
|||
|---|---|---|---|
|
#18+
--поправил--поправил, а если тупо вписать otahotel_2014w32 вместо otahotel ? план не поменяется ? -- может быть он[, оптимайзер бишь 9.2.8,] аппендить при хешджойне не обучен ? Код: sql 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. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 17:28:50 |
|
||
|
улучшить время выполнения
|
|||
|---|---|---|---|
|
#18+
--поправил, Было бы интересно глянуть на план в 9.3. Хотя бы только на один запрос по этим 4 таблицам... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 17:29:03 |
|
||
|
улучшить время выполнения
|
|||
|---|---|---|---|
|
#18+
best_time, ну вот раньше 16469948 выяснилось, что таки обучен Код: sql 1. но оценивает в 1.5 раза дороже чем Nested Loop Приведите EXPLAIN ANALYZE этого случая [да и извиняюсь за описки и одумки -- невнимательность] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 17:33:22 |
|
||
|
улучшить время выполнения
|
|||
|---|---|---|---|
|
#18+
--поправил, Код: sql 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. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 17:44:15 |
|
||
|
улучшить время выполнения
|
|||
|---|---|---|---|
|
#18+
best_time, да, пожалуй он мало ошибается (2-3 -- допустимо для сложных запросов). т.ч. [намного] лучше уже не будет. ещё выкиньте всё ненужное из агрегата (например константу -- первое поле) -- прикрутите после. -- немного сэкономите работу оптимайзеру. (каким бы путём не пошли). А всю расшифровку прикрутите после свертки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 17:54:57 |
|
||
|
улучшить время выполнения
|
|||
|---|---|---|---|
|
#18+
--поправил1. свернуть все 65 лямов на проходе (100 секунд --см выше), потом поджойниться - выиграем вполовину, но никак не больше или (совсем другое) 2. взять в CTE 100 id, и для каждого из них в конструкции with recursive взять свой агрегат (что оптимайзер [+-километр] и должен делать, но я как-то это плохо читаю). Первый вариант выглядит оптимальным и выигрыш вполне себе хороший. Второй был представлен ТС в начальном посте (и я на нем зациклился). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 18:31:48 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=38724810&tid=1998523]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
178ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 196ms |
| total: | 446ms |

| 0 / 0 |
