Соединение левого вложенного цикла между a
и b
, вероятно, является наиболее эффективным методом здесь.Существует 850000 циклов, но каждое из этих исполнений занимает всего 0,002 миллисекунды, что составляет в общей сложности около 1,9 секунды.Это выполняется тремя рабочими параллельно, поэтому фактическое время составляет около 0,6 секунды.
Это вместе с 0,7 секундами из параллельного сканирования индекса на a
составляет время выполнения.
Альтернативой было бы выполнить хеш-соединение между a
и b
, что потребовало бы последовательного сканирования на b
и большого хеш-кода.Либо последовательное сканирование было бы более дорогим, либо work_mem
был настроен слишком маленьким, чтобы содержать результирующий хэш.
Единственный шанс для улучшения - повысить work_mem
и посмотреть, не станет ли выполнение немного быстрее таким образом..
Чтобы проверить правильность моего анализа, попробуйте
SET enable_nestloop = off;
, а затем снова выполните запрос.Если это замедляет выполнение, PostgreSQL поступил правильно.