|
Как быстро удалить строки из таблицы?
|
|||
---|---|---|---|
#18+
Добрый день, коллеги. Подскажите пожалуйста как можно ускорить запрос, удаляющий из таблицы t1 записи, отсутствующие в t2? Вот такой запрос висит часами: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Возможно как-то по-другому реализовать удаление? Быстрее? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2018, 14:17 |
|
Как быстро удалить строки из таблицы?
|
|||
---|---|---|---|
#18+
Синий СлонДобрый день, коллеги. Подскажите пожалуйста как можно ускорить запрос, удаляющий из таблицы t1 записи, отсутствующие в t2? Вот такой запрос висит часами: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Возможно как-то по-другому реализовать удаление? Быстрее? А много ли удаляется строк? На медленном диске удаление 13M строк вполне может часы занять. Но более вероятный вариант - а на t1 нет никаких ссылающихся на нее FK из других таблиц? Дополнительно - перепишите NOT IN на NOT EXISTS будет сразу быстрее все. NOT IN - очень медленная операция. Обычно такие запросы анализируют путем - сделали select соответствующий delete, дальше если select быстро работает а delete очень медленно то FK или триггера.... если же сам select Тормозит то его и надо ускорять сначала. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2018, 14:20 |
|
Как быстро удалить строки из таблицы?
|
|||
---|---|---|---|
#18+
Maxim BogukСиний СлонДобрый день, коллеги. Подскажите пожалуйста как можно ускорить запрос, удаляющий из таблицы t1 записи, отсутствующие в t2? Вот такой запрос висит часами: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Возможно как-то по-другому реализовать удаление? Быстрее? А много ли удаляется строк? На медленном диске удаление 13M строк вполне может часы занять. Но более вероятный вариант - а на t1 нет никаких ссылающихся на нее FK из других таблиц? Дополнительно - перепишите NOT IN на NOT EXISTS будет сразу быстрее все. NOT IN - очень медленная операция. Обычно такие запросы анализируют путем - сделали select соответствующий delete, дальше если select быстро работает а delete очень медленно то FK или триггера.... если же сам select Тормозит то его и надо ускорять сначала. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru удаляется немного, примерно 1% данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2018, 14:38 |
|
Как быстро удалить строки из таблицы?
|
|||
---|---|---|---|
#18+
Максим, спасибо за ответы. Maxim BogukДополнительно - перепишите NOT IN на NOT EXISTS будет сразу быстрее все. NOT IN - очень медленная операция. Не совсем понял как это сделать, как связать client_id и NOT EXISTS так получается бессмыслица какая-то: DELETE FROM t1 WHERE client_id NOT EXISTS (SELECT id FROM t2); Извиняюсь заранее, не выспался, медленно соображаю ... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2018, 14:43 |
|
Как быстро удалить строки из таблицы?
|
|||
---|---|---|---|
#18+
Синий СлонМаксим, спасибо за ответы. Maxim BogukДополнительно - перепишите NOT IN на NOT EXISTS будет сразу быстрее все. NOT IN - очень медленная операция. Не совсем понял как это сделать, как связать client_id и NOT EXISTS так получается бессмыслица какая-то: DELETE FROM t1 WHERE client_id NOT EXISTS (SELECT id FROM t2); Извиняюсь заранее, не выспался, медленно соображаю ... Вроде дошло ) Надеюсь вы это имели ввиду: Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2018, 14:57 |
|
Как быстро удалить строки из таблицы?
|
|||
---|---|---|---|
#18+
в плане появился anti join посмотрим на практике получится ли удалить таким запросом, очень надеюсь что да. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2018, 15:00 |
|
Как быстро удалить строки из таблицы?
|
|||
---|---|---|---|
#18+
Синий СлонВроде дошло ) Надеюсь вы это имели ввиду: Код: sql 1.
Да. PS: еще раз процитирую Обычно такие запросы анализируют путем - сделали select соответствующий нужному вам delete, дальше если select быстро работает а delete очень медленно то FK или триггера.... если же сам select Тормозит то его и надо ускорять сначала. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2018, 15:11 |
|
Как быстро удалить строки из таблицы?
|
|||
---|---|---|---|
#18+
Maxim BogukСиний СлонВроде дошло ) Надеюсь вы это имели ввиду: Код: sql 1.
Да. PS: еще раз процитирую Обычно такие запросы анализируют путем - сделали select соответствующий нужному вам delete, дальше если select быстро работает а delete очень медленно то FK или триггера.... если же сам select Тормозит то его и надо ускорять сначала. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru Максим, замена на NOT EXIST ускорила запрос!!! Запрос успешно выполнен без возвращаемых данных за 399658 мс. Большое спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2018, 15:25 |
|
Как быстро удалить строки из таблицы?
|
|||
---|---|---|---|
#18+
Синий Слон, ускорить NOT IN без переписывания запроса можно - влив work_mem :) Заранее узнать сколько именно нужно work_mem невозможно, только запустить и посмотреть. В простом explain к сожалению это не видно. для информации https://explainextended.com/2009/09/16/not-in-vs-not-exists-vs-left-join-is-null-postgresql/ ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2018, 12:11 |
|
|
start [/forum/search_topic.php?author=sergeevich&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
11ms |
get forum list: |
17ms |
get settings: |
12ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
61ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 441ms |
total: | 633ms |
0 / 0 |