Re: Incorrect cost for MergeAppend
От | Alexander Kuzmenkov |
---|---|
Тема | Re: Incorrect cost for MergeAppend |
Дата | |
Msg-id | CALzhyqyZ32TFpBCibgHwpzmn3V9rYNP3K_UzOjD3ibf+36Z5Yw@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: Incorrect cost for MergeAppend (Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>) |
Ответы |
Re: Incorrect cost for MergeAppend
Re: Incorrect cost for MergeAppend |
Список | pgsql-hackers |
Here is a small patch that reproduces the problem on two tables with inheritance, and fixes it. I'll add it to the Commitfest. On Tue, Jan 30, 2024 at 8:20 AM Ashutosh Bapat <ashutosh.bapat.oss@gmail.com> wrote: > > On Mon, Jan 29, 2024 at 6:11 PM Alexander Kuzmenkov > <akuzmenkov@timescale.com> wrote: > > > > Hello hackers, > > > > While investigating some query plans, I noticed some code that seems > > to be wrong: when create_merge_append_path() estimates the cost of > > sorting an input, it calls cost_sort() passing subpath->parent->tuples > > as the number of tuples. Shouldn't it use subpath->parent->rows or > > even subpath->rows instead? The `tuples` variable doesn't account for > > the filters on the relation, so this leads to incorrect cost estimates > > when there are highly selective filters, and Sort + Append is chosen > > instead of MergeAppend. > > All other callers of cost_sort() except plan_cluster_use_sort() are > using rows instead of tuples. Even plan_cluster_use_sort() has > rel->rows = rel->tuples, it's actually passing rows. So agree with > your suggestion. However a test will be good since this code is quite > old. > > -- > Best Wishes, > Ashutosh Bapat
Вложения
В списке pgsql-hackers по дате отправления: