← Все новости
Почему COALESCE ломает план PostgreSQL и как научить планировщик считать его селективность?

Почему COALESCE ломает план PostgreSQL и как научить планировщик считать его селективность?

Один COALESCE в условии способен превратить быстрый Hash Join в мучительно долгий Nested Loop. Убрать оператор COALESCE — и оценка стоимости плана упадёт в десятки раз, а запрос отработает мнгновенно. В данных при этом не меняется ничего: та же колонка, та же статистика, та же селективность, просто без COALESCE планировщик её видит, а с ним — перестаёт. Обсудим, как один COALESCE в JOIN роняет план, почему PostgreSQL теряет на нём оценку, и посмотрим на патч, который учит планировщик считать селективность COALESCE из имеющейся статистики. Читать далее