|
|
|
Почему PostgreSQL сканирует тамк много строк?
|
|||
|---|---|---|---|
|
#18+
Задал вопрос на stackoverflow так же в разделе database. http://dba.stackexchange.com/questions/139992/why-postgresql-scans-a-lot-of-rows На небольшую таблицу в 135000 строк с такой вот схемой Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Делается такой вот запрос Код: 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. 45. 46. Его план выполнения получается такой Код: 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. 45. Откуда берутся rows=530354 на сканирование? Мне вообще не понятно. Если я запускаю выборки из подзапросов отдельно, то они работают очень быстро. Но если я в запрос добавлю еще 3 подзапроса таких же простых, то получаю Sort (cost=4793.22..4794.60 rows=550 width=24) (actual time=2.881..127147.085 rows=3353783690 loops=1) Planning time: 1.490 ms Execution time: 1593005.255 ms Как это происходит? Постгре 9.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2016, 15:16 |
|
||
|
Почему PostgreSQL сканирует тамк много строк?
|
|||
|---|---|---|---|
|
#18+
seyfer, Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2016, 15:29 |
|
||
|
Почему PostgreSQL сканирует тамк много строк?
|
|||
|---|---|---|---|
|
#18+
g2099599, Но мне нужна эта группировка. Конечно без нее все оченб быстро. Но мне нужно, например в запросе week, получить строку на каждый день недели, тк. мне нужно среднее значение, я делаю дальше sum() / 7 (на 7 дней). Как иначе я получу на аккаунт... и тут меня озарило. Я же так делю каждый день на 7, а мне нужно сумму дней на 7 делить, т.е. группировка по date не нужна, действительно. Спасибо)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2016, 15:44 |
|
||
|
Почему PostgreSQL сканирует тамк много строк?
|
|||
|---|---|---|---|
|
#18+
seyfer, Ваши подзапросы генерят по нескольку записей для каждой `hs.customer_id` (не выношу, когда двойные кавычки без надобности пихаются) — `GROUP BY hs.customer_id, hs.date` сделает до 8 строчек в подзапросе `weeklyAvg` и до 31 для `monthlyAvg`. Вот у вас кол-во записей и пухнет. Названия подзапросов не соответствуют тому, что вы делаете в запросе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2016, 15:53 |
|
||
|
Почему PostgreSQL сканирует тамк много строк?
|
|||
|---|---|---|---|
|
#18+
seyfer, что написали, то и делает. Я бы пошел от ORDER BY account -- раз уж вы выбираете всего 50 -- зачем вам агрегировать и сортировать всё каждый раз. предположим, у вас есть индекс по account -- тогда, тащем--то все просто. или "не больше , чем, по 50" -- простыми летералами, или точно по 50 -- рекурсивно -- теми же летералами. это если account --ов у вас много больше 500 , конечно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2016, 15:57 |
|
||
|
Почему PostgreSQL сканирует тамк много строк?
|
|||
|---|---|---|---|
|
#18+
А что, если бы мне все таки нужно было бы по дням, как тогда быть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2016, 15:58 |
|
||
|
Почему PostgreSQL сканирует тамк много строк?
|
|||
|---|---|---|---|
|
#18+
qwwq, увидел 47 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2016, 16:01 |
|
||
|
Почему PostgreSQL сканирует тамк много строк?
|
|||
|---|---|---|---|
|
#18+
vyegorovseyfer, Ваши подзапросы генерят по нескольку записей для каждой `hs.customer_id` (не выношу, когда двойные кавычки без надобности пихаются) — `GROUP BY hs.customer_id, hs.date` сделает до 8 строчек в подзапросе `weeklyAvg` и до 31 для `monthlyAvg`. Вот у вас кол-во записей и пухнет. Названия подзапросов не соответствуют тому, что вы делаете в запросе. сделает до 8 строчек в подзапросе `weeklyAvg` и до 31 для `monthlyAvg` - а как тут 3 млрд получается в сумме то? действительно, в подзапросах делал несколько не то, уже ответил в ответе выше, мне не нужна группировка по date, а что если была бы нужна? как тогда решать проблему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2016, 16:01 |
|
||
|
Почему PostgreSQL сканирует тамк много строк?
|
|||
|---|---|---|---|
|
#18+
seyfer, скажите , любезный, а опорный справочник кастомеров с мейлами у вас есть ? что бы вам не из хистори его выщеплять за все годы безумным агрегатом (который на вскидку еще и навран чкуть больше чем полностью), а сталобыть взять "одной строкой" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2016, 16:06 |
|
||
|
Почему PostgreSQL сканирует тамк много строк?
|
|||
|---|---|---|---|
|
#18+
qwwqseyfer, скажите , любезный, а опорный справочник кастомеров с мейлами у вас есть ? чтобы вам не из хистори его выщеплять за все годы безумным агрегатом (который на вскидку еще и навран чкуть больше чем полностью), а сталобыть взять "одной строкой" -- поправил ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2016, 16:08 |
|
||
|
Почему PostgreSQL сканирует тамк много строк?
|
|||
|---|---|---|---|
|
#18+
qwwqseyfer, скажите , любезный, а опорный справочник кастомеров с мейлами у вас есть ? что бы вам не из хистори его выщеплять за все годы безумным агрегатом (который на вскидку еще и навран чкуть больше чем полностью), а сталобыть взять "одной строкой" Спавочник в отрыве от истории не нужен. В данной задаче мне нужно, например за неделю, для каждого аккаунта выбрать среднее значение хитов. Группировка акканутов по ид или емейл, сумма хитов / 7. Я уже убрал не нужные GROUP BY date и все заработало быстро. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2016, 16:10 |
|
||
|
Почему PostgreSQL сканирует тамк много строк?
|
|||
|---|---|---|---|
|
#18+
seyferСпавочник в отрыве от истории не нужен. кхмм, "умного учить -- только портить" ((С)норот) не буду мешать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2016, 16:15 |
|
||
|
Почему PostgreSQL сканирует тамк много строк?
|
|||
|---|---|---|---|
|
#18+
qwwqseyferСпавочник в отрыве от истории не нужен. кхмм, "умного учить -- только портить" ((С)норот) не буду мешать Вы просто не в курсе всего проекта. Применяются микросервисы и справочник есть, но в другой БД в другом сервисе. К нему нету доступа. Дублировать и синхронизировать его - нет смысла. Если бы справочник был, что бы это дало? Объясните, покажите на примере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2016, 16:18 |
|
||
|
Почему PostgreSQL сканирует тамк много строк?
|
|||
|---|---|---|---|
|
#18+
seyferПрименяются микросервисы и справочник есть, но в другой БД в другом сервисе. К нему нету доступа. И проект на жаве, да?! "Микросервисы" и "справочник в другой базе, доступа нет" для меня маркеры, что всё... «не взлетит» (c). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2016, 16:31 |
|
||
|
Почему PostgreSQL сканирует тамк много строк?
|
|||
|---|---|---|---|
|
#18+
seyferqwwqпропущено... кхмм, "умного учить -- только портить" ((С)норот) не буду мешать Вы просто не в курсе всего проекта.не удивили -- быть "не в курсе всего проекта" -- вечная моя участьseyferПрименяются микросервисы и справочник есть, но в другой БД в другом сервисе. К нему нету доступа. Дублировать и синхронизировать его - нет смысла. Если бы справочник был, что бы это дало? Объясните, покажите на примере.мне лень ищите как максим делал быстрый дистинкт по индексированному полю, -- может быть что--то поймёте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2016, 16:32 |
|
||
|
Почему PostgreSQL сканирует тамк много строк?
|
|||
|---|---|---|---|
|
#18+
vyegorovseyferПрименяются микросервисы и справочник есть, но в другой БД в другом сервисе. К нему нету доступа. И проект на жаве, да?! "Микросервисы" и "справочник в другой базе, доступа нет" для меня маркеры, что всё... «не взлетит» (c). ну зачем так сразу. чел явно не понимает, что пишет в скл -- это сейчас для инструктивных погромистов в порядке вещей. и не только жабоидов. "куяк--куяк ифпрадакшиин" стайл ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2016, 16:37 |
|
||
|
Почему PostgreSQL сканирует тамк много строк?
|
|||
|---|---|---|---|
|
#18+
seyferсделает до 8 строчек в подзапросе `weeklyAvg` и до 31 для `monthlyAvg` - а как тут 3 млрд получается в сумме то? ВЫ можете объяснить почему этот запрос возвращает не одну строку -- кастомер ведь только один? Код: sql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2016, 17:06 |
|
||
|
Почему PostgreSQL сканирует тамк много строк?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2016, 18:20 |
|
||
|
Почему PostgreSQL сканирует тамк много строк?
|
|||
|---|---|---|---|
|
#18+
Lonepsycho, Спасибо, но не по адресу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2016, 19:08 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=39247332&tid=1997201]: |
0ms |
get settings: |
10ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
180ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
75ms |
get tp. blocked users: |
2ms |
| others: | 212ms |
| total: | 520ms |

| 0 / 0 |
