|
Из-за чего ограничивается число выбираемых строк?
|
|||
---|---|---|---|
#18+
Доброе утро! В наличие есть таблица diagnosis на 15 млн строк и таблица icd на 14 тыс строк. Делаю следующий запрос в лоб Код: sql 1. 2.
получаю следующий план при explain analyze Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
На этапе Merge Join получается 131 строка, хотя таких строк в таблице больше, счет на тысячи. Немного меняю запрос Код: sql 1. 2.
получаю Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
и снова выборка ограничена 131 строкой. Не могу понять из-за чего так происходит. Возможно, я что-то упускаю? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2020, 10:47 |
|
Из-за чего ограничивается число выбираемых строк?
|
|||
---|---|---|---|
#18+
kochka, 'хотя таких строк в таблице больше, счет на тысячи.' - каких "таких строк" и как вы это проверяли? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2020, 11:48 |
|
Из-за чего ограничивается число выбираемых строк?
|
|||
---|---|---|---|
#18+
Maxim Boguk,строк попадающих под условие. Код: sql 1.
дело в том, что эти запросы мне нужны для сложного update, который использует несколько таблиц. Для этого мною написана отдельная процедура, которая потом запускается в цикле в анонимном блоке. Изначально на запросы выше был еще повешен limit 1000, для того чтобы обновления происходили пачками и не перегружали базу. Но позже, когда скорость выполнения процедуры в цикле существенно замедлилась, я решила остатки таких строк залить во временную таблицу, чтобы использовать ее. Тут я и заметила, что выборка происходит только на 131 строку. При включение raise notice для Id изменяемых строк это подтвердилось. То есть за одну итерацию цикла он выбирает 131 строку, и таких итераций было, после того как заметила это ограничение, уже больше 2000. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2020, 12:48 |
|
Из-за чего ограничивается число выбираемых строк?
|
|||
---|---|---|---|
#18+
kochka Maxim Boguk,строк попадающих под условие. Код: sql 1.
дело в том, что эти запросы мне нужны для сложного update, который использует несколько таблиц. Для этого мною написана отдельная процедура, которая потом запускается в цикле в анонимном блоке. Изначально на запросы выше был еще повешен limit 1000, для того чтобы обновления происходили пачками и не перегружали базу. Но позже, когда скорость выполнения процедуры в цикле существенно замедлилась, я решила остатки таких строк залить во временную таблицу, чтобы использовать ее. Тут я и заметила, что выборка происходит только на 131 строку. При включение raise notice для Id изменяемых строк это подтвердилось. То есть за одну итерацию цикла он выбирает 131 строку, и таких итераций было, после того как заметила это ограничение, уже больше 2000. Тогда собирайте доказательную базу и пишите в "хакерс" что "Ваш оптимизатор не работает". Глядишь - прославитесь как "починитель мега бага" И статистику надо бы пересобрать. Код: sql 1. 2. 3.
хрень какая-то ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2020, 13:00 |
|
Из-за чего ограничивается число выбираемых строк?
|
|||
---|---|---|---|
#18+
kochka Maxim Boguk,строк попадающих под условие. Код: sql 1.
дело в том, что эти запросы мне нужны для сложного update, который использует несколько таблиц. Для этого мною написана отдельная процедура, которая потом запускается в цикле в анонимном блоке. Изначально на запросы выше был еще повешен limit 1000, для того чтобы обновления происходили пачками и не перегружали базу. Но позже, когда скорость выполнения процедуры в цикле существенно замедлилась, я решила остатки таких строк залить во временную таблицу, чтобы использовать ее. Тут я и заметила, что выборка происходит только на 131 строку. При включение raise notice для Id изменяемых строк это подтвердилось. То есть за одну итерацию цикла он выбирает 131 строку, и таких итераций было, после того как заметила это ограничение, уже больше 2000. ну тогда находитe строку которая должна быть в запросе показываете ее данные и показываете что запрос ее не отдает (можно на этом форуме)... пока это все даже не bug report а просто жалобы непонятно на что Т.е. от вас есть строка в diagnosis с такими то полями есть строка в icd с такими то полями вот такой запрос ее не отдает хотя должен (пример запроса и проверка что этой строки там таки действительно нет) меня слегка смущает конструкция d.diagnosis_text = (i.code)::text а какие типы данных у вас там на обоих сторонах равенства? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2020, 13:19 |
|
Из-за чего ограничивается число выбираемых строк?
|
|||
---|---|---|---|
#18+
Покажите так же процедуру и цикл, которыми обновляете. Может у Вас там условие отбора кривое и Вы одни и те же данные постоянно обновляете. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2020, 14:11 |
|
Из-за чего ограничивается число выбираемых строк?
|
|||
---|---|---|---|
#18+
Всем спасибо за внимание! Нашлась ошибка в данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2020, 14:12 |
|
|
start [/forum/topic.php?fid=53&msg=39977127&tid=1994612]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
39ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
others: | 345ms |
total: | 475ms |
0 / 0 |