Реклама

UniqueKeys — планировщик PostgreSQL учится помнить, где строки уникальны

#UniqueKeys #PostgreSQL #Патч #Сейчас #Механизм
UniqueKeys — планировщик PostgreSQL учится помнить, где строки уникальны

Патч UniqueKeys для PostgreSQL предлагает научить планировщик распознавать случаи, когда строки запроса уже гарантированно уникальны. Сейчас он не всегда может это определить и выполняет лишнюю работу: повторно проверяет данные на дубликаты, хотя в этом нет необходимости, или упускает более дешеый план выполнения. Механизм UniqueKeys позволяет прослеживать уникальность данных через сложные соединения и подзапросы, чтобы исключать ненужные операции DISTINCT и GROUP BY и точнее оценивать стоимость запросов. В Tantor Postgres этот механизм уже реализован, а патч предложен для рассмотрения сообществом PostgreSQL в рамках CommitFest. Читать далее

Если планировщик знает, что строки какого-то отношения гарантированно не повторяются, он может строить более дешёвые планы, например:

- выбросить DISTINCT илиGROUP BY , которые ничего не делают;

- пометить соединение как Inner Unique : внутренней стороне соответствует не больше одной строки на каждую внешнюю; executor может закончить поиск совпадения по условиям соеднинения, а планировщик использует эту гарантию при оценке стоимости;

- не делать правую сторону IN (SELECT ...) уникальной перед соединением, если она уже уникальна.