запрос (максимально упрощен, в реале там больше условий) - https://pastebin.com/qW5gVdNV
Проблема в том что он выполняется довольно долго (10 секунд при количестве записей около 4 миллионов)
Но если поменять 8 строчку с COALESCE(click_sub1, conversion_sub1) AS sub1 на click_sub1 AS sub1 то запрос выполняется уже около секунды.
Я так понимаю что это происходит из-за того что в случае с coalesce запрос не использует индекс поля sub1 (индекс есть, я создавал)
Вот EXPLAIN с оригинальной 8ой строчкой - https://pastebin.com/83nQN0dF
EXPLAIN c `click_sub1 AS sub1` - https://pastebin.com/xHtHnhdb
Подскажите пожалуйста как исправить запрос так чтобы он начал работать шустрее?
Напиши функциональный индекс на значение COALESCE(click_sub1, conversion_sub1)
Обсуждать производительность "похожего" запроса бессмысленно.
1. Это vanilla PostgreSQL (тогда есть https://t.me/pgsql ) ? Или fork? Или что-то "левое", но сильно похожее? 2. Простые EXPLAIN-ы практически бесполезны для анализа.
Могу тебе лишь порекомендовать "уплощить" запрос, написать его без подзапросов во FROM, это позволить хотя бы осозновать (тебе в первую очередь) что и откуда запрос выбирает.
Обсуждают сегодня