|
|
|
Merge делается частями?
|
|||
|---|---|---|---|
|
#18+
Всем привет! PostgreSQL 9.2.4 on x86_64-unknown-linux-gnu, compiled by gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3, 64-bit Запрос: Код: sql 1. 2. 3. 4. 5. 6. план: Код: 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. Вопрос: Как постгрес понял, что можно прочитать только часть строк? (например для таблицы otahotel_2015w06 запланировал 59753404, а прочитал 1. Для otahotel запланировал 512915, прочитал 7. Запланированое соответствует количеству строк в таблицах. ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 17:19 |
|
||
|
Merge делается частями?
|
|||
|---|---|---|---|
|
#18+
Gold_, вы же лимит наложили, а он вдоль oh.otahotel_id, вдоль которого мерж--аппенд происходит. Как отъели 10 (в процессе мерджа) -- так и перестали мерджить. а условие у вас -- партиционное -- нужные партиции, считай, все >= '2015-02-01' Вот если вы в другом порядке лимит наложите -- тут и приплывёте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 17:54 |
|
||
|
Merge делается частями?
|
|||
|---|---|---|---|
|
#18+
Gold_Всем привет! Вопрос: Как постгрес понял, что можно прочитать только часть строк? (например для таблицы otahotel_2015w06 запланировал 59753404, а прочитал 1. Для otahotel запланировал 512915, прочитал 7. Запланированое соответствует количеству строк в таблицах. ) Запланировал много поскольку статистики такие. А вернул только то, что пропустил фильтр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 18:09 |
|
||
|
Merge делается частями?
|
|||
|---|---|---|---|
|
#18+
vyegorovGold_Всем привет! Вопрос: Как постгрес понял, что можно прочитать только часть строк? (например для таблицы otahotel_2015w06 запланировал 59753404, а прочитал 1. Для otahotel запланировал 512915, прочитал 7. Запланированое соответствует количеству строк в таблицах. ) Запланировал много поскольку статистики такие. А вернул только то, что пропустил фильтр. Нет. фильтр не участвовал. лопатаGold_, вы же лимит наложили, а он вдоль oh.otahotel_id, вдоль которого мерж--аппенд происходит. Как отъели 10 (в процессе мерджа) -- так и перестали мерджить. а условие у вас -- партиционное -- нужные партиции, считай, все >= '2015-02-01' Вот если вы в другом порядке лимит наложите -- тут и приплывёте. правильно ли я понимаю, что на этапе чтения индексов таблиц партиций oh сначала читается по одной записи, затем принимается решение из каких таблиц дочитать, затем читается индекс таблицы o, пока не попадется максимальный из прочитанных из oh? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 13:35 |
|
||
|
Merge делается частями?
|
|||
|---|---|---|---|
|
#18+
Gold_, как оно работает -- я точно не читал. полагаю, что вы излагаете почти правильно если в плане по партицированной таблице "Merge Append", а в самом запросе -- "LIMIT" -- то оно , не смотря на "вложенность" плана, обрезается (пытается) лимитом после каждого шага мерджа. Если же ордер бай сделать поперек индексов, по которым он спланирует выбирать, то в плане будет простой (а не мердж) аппенд, потом -- сорт, и только потом -- лимит. Т.е. тогда "унтуре" он "профетчит" всё, что "запланировал". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 14:48 |
|
||
|
Merge делается частями?
|
|||
|---|---|---|---|
|
#18+
Gold_, вот исходники как это сделано. довольно хитро оказывается устроено. насколько я понял, сначала действительно считывается по одному таплу из каждой subnode (если есть). дальше вот не совсем понятно, но можно предположить что в отсортированном массиве устанавливается указатель на наименьшее значение и следующий элемент читается из соответствующей subnode, результат вставляется в нужное место и указатель перемещается. на самом деле там как-то по-другому сделано, но смысл скорее всего похожий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 15:44 |
|
||
|
|

start [/forum/topic.php?fid=53&fpage=115&tid=1998162]: |
0ms |
get settings: |
11ms |
get forum list: |
20ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
91ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
69ms |
get tp. blocked users: |
2ms |
| others: | 251ms |
| total: | 470ms |

| 0 / 0 |
