быстрее выполняться чем запрос №1?
В таблице domain 150 млн строк, в таблице tmp обычно по 5 млн строк.
Запрос №1 (update + left join): https://explain.tensor.ru/archive/explain/0edd10c91224e5e655ffcc5eab29d641:0:2020-08-25
Запрос №2 (update + NOT IN): https://explain.tensor.ru/archive/explain/6034832dc78f8b90d9a8111ecbbfcdb7:0:2020-08-25
Запрос №3 (update + NOT EXISTS): https://explain.tensor.ru/archive/explain/3910470f2ddef9e6a65a5ec83a4c0497:0:2020-08-25
Что можно ещё улучшить?
Какие индексы лучше добавить (много одиночных или один составной)?
сказать точно ничего нельзя без EXPLAIN (analyze, buffers). думаю, что в текущем виде: - запрос 2 лучше чем 1 ( в 1-м 2 SeqScan-а по domain ) - запрос 3 возможно лучше чем 2 из-за материализации (но это не точно) я бы сделал индекс по tmp, чтобы 2-й и 3-й запросы быстрее отрабатывали. также я бы подумал, чтобы обновлять не сразу всю таблицу domain (долгая транзакция), а кусками примерно по 1кк записей (в порядке возрастания ID, скажем)
Обсуждают сегодня