Re: Removing unneeded self joins

Поиск
Список
Период
Сортировка
От Hywel Carver
Тема Re: Removing unneeded self joins
Дата
Msg-id CAFcA2FauZ2jGka8utvFmRE1eLrKfmJmPnQjtf_cdewChFu0qcQ@mail.gmail.com
обсуждение исходный текст
Ответ на Re: Removing unneeded self joins  (Andrey Lepikhov <a.lepikhov@postgrespro.ru>)
Ответы Re: Removing unneeded self joins  (Andrey Lepikhov <a.lepikhov@postgrespro.ru>)
Список pgsql-hackers
On Wed, Jun 30, 2021 at 12:21 PM Andrey Lepikhov <a.lepikhov@postgrespro.ru> wrote:
On 12/3/21 12:05, Hywel Carver wrote:
> I've built and tested this, and it seems to function correctly to me. One question I have is whether the added "IS NOT NULL" filters can be omitted when they're unnecessary. Some of the resulting plans included an "IS NOT NULL" filter on a non-nullable column. To be clear, this is still an improvement (to me) without that. 
I think, here we could ask more general question: do we want to remove a
'IS NOT NULL' clause from the clause list if the rest of the list
implicitly implies it?

My suggestion was not to remove it, but to avoid adding it in the first place. When your optimisation has found a join on a group of columns under a uniqueness constraint, you would do something like this (forgive the pseudo-code)

foreach(column, join_clause) {
  if(column.nullable) { // This condition is what I'm suggesting is added
    add_null_test(column, IS_NOT_NULL);
  }
}

But it may be that that's not possible or practical at this point in the code.

В списке pgsql-hackers по дате отправления:

Предыдущее
От: Thomas Munro
Дата:
Сообщение: Re: A qsort template
Следующее
От: Bruce Momjian
Дата:
Сообщение: Re: PG 14 release notes, first draft