Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vyE4P-00HY6S-2h for pgsql-performance@arkaria.postgresql.org; Thu, 05 Mar 2026 19:09:13 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vyE4O-000uyH-0N for pgsql-performance@arkaria.postgresql.org; Thu, 05 Mar 2026 19:09:12 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vyE4N-000uy9-2F for pgsql-performance@lists.postgresql.org; Thu, 05 Mar 2026 19:09:12 +0000 Received: from mail-wr1-x434.google.com ([2a00:1450:4864:20::434]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vyE4L-00000000b4D-2fXY for pgsql-performance@lists.postgresql.org; Thu, 05 Mar 2026 19:09:11 +0000 Received: by mail-wr1-x434.google.com with SMTP id ffacd0b85a97d-439b9b190easo3219754f8f.2 for ; Thu, 05 Mar 2026 11:09:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1772737748; x=1773342548; darn=lists.postgresql.org; h=in-reply-to:from:content-language:references:to:subject:user-agent :mime-version:date:message-id:from:to:cc:subject:date:message-id :reply-to; bh=jYaxSS7kK7YMkYclHlAfD70TGMLzrQsOclQwqxGkRnI=; b=mXV+nXVEM0Dkt+5XjDZvaareW1SnTL82YtOfpXyuclmRcFi+lOsMh21CFbC4aODJ0o +megkG5YzY3CR4Ru8sshJU3oPMa385fNf6+ijIZvXqQ4BZVreqhQRCYCnDl+igKMwxXc /ZxkmWiIwlBbHtjAalVDKW7lJ5huXR50sJ/n2J/Q/owIDaMEnsmtiJNRyBkJnlXQeo37 YYZp/B20OseiC96nrYEyTG/9cGgTg54Yx29IukeGo7Q+z7dEZVNtJvw7T6qJSxaCMRYt ErS24kPlJgPqJRdpNIqBVvrKSYZcExGx+1NRJfml9Z8KXPzqc6CGL7zPkEze/RYgQRNh Pntg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772737748; x=1773342548; h=in-reply-to:from:content-language:references:to:subject:user-agent :mime-version:date:message-id:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=jYaxSS7kK7YMkYclHlAfD70TGMLzrQsOclQwqxGkRnI=; b=sa/q2InZZQrJJzoUlKYb9ViqVEraFF0gXEYitxqDLChEPCOG8InbDVefOu7xnG74of jC4wC6ehSU6Ap2TS6q5osSttGzauqXvH0glXRJMeNbMJc1wSbq07eGb/VK1zoNAVAUOr jbG4ZZhaH+sVMEl3JeGnOyZCyokRFPwPL72ra/Q3ZugSKqVzerY3CwURJd/0qzXlRVAJ h1+aXNm0RK9AoFsrrF6xK0OOB2tI1MBYC15arTEihHGc40ey2jPplCTBS03xWcpBnk9+ xN21YibNCuOviDGW5Vd5NpMiW0oQLJmW4vnYqxzN//ratcK0JcE2tE4dD6lm4QacbTxq Gz4A== X-Forwarded-Encrypted: i=1; AJvYcCXtlW8GRlnxHuGi9v12FZw7HFbqw5E71EC5OkvuTRhaMpSMLOTHL4InwFt7CePLROHDnVNPCFD85xZT/gqsKvbVfA==@lists.postgresql.org X-Gm-Message-State: AOJu0YwwIee4wqkXHeigfnxOU3JBJG4jlY4kyTa8Iflmty9KzkV/F6K+ h9ItiXaTkFoe7/gWVMvtRXvvOsNwgcicBEqUU3CXAEbPRPeAGcAEogVd X-Gm-Gg: ATEYQzxo0fPyhZOWIYqPEqsLh6oxhsVkF53Hap76enLFUyNWOCu1t7UssLim6Db3Tzp bxvCFnHATo3O7EcLYXRnLq/WlevsaUg3uHZ/TZNx2c+DbibaC8v/MYvc7HL4eamX7aJVVDq/zOn XwB/tARl3Yhws/Jp+gcJIKPpKghTw0C4gh729jcO79Kif7qb0baXY31f96bSfy1ezqhJaHa4f41 FdNjDeMpAyGNrtMFAbF4dwLQ+ZLHCcEYbsBWTC9OUyDBYamjLOPFjX0/9tDQ9uGKe5Ti6vxmpMV gTC9beKHPEdbiOvIdN+VJDFYEK/PlPZKo6oR5sy5fumndYpyCgkVx5WNHNMgQP73FM3DVX4JLrZ tLe9SO7ClfMERxmNZlCYyA68e08gpUblLXUsjOuDsF6g1H17KnuPk2ZqXe1xWroMRKNUSwf0LCK ODtxwIfCl84sE1VrMCMM6VA0y/IraZixMXRgTTvmEJnr3qb4NhS+Y55p9IIA9qXCN1Rp5NOXalY Q== X-Received: by 2002:a05:6000:2312:b0:439:c39e:da00 with SMTP id ffacd0b85a97d-439d724ada7mr1634706f8f.33.1772737747915; Thu, 05 Mar 2026 11:09:07 -0800 (PST) Received: from [192.168.0.86] (84.123.225.106.dyn.user.ono.com. [84.123.225.106]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-439c1fc577bsm21547925f8f.19.2026.03.05.11.09.06 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 05 Mar 2026 11:09:07 -0800 (PST) Content-Type: multipart/mixed; boundary="------------5dqdi8p14ttt7c0amcVxikPs" Message-ID: <12c0b535-42f5-47c5-a8e7-45b4209e8ac9@gmail.com> Date: Thu, 5 Mar 2026 20:09:06 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Planner join order regression from PG 15 to PG 16+: 70ms -> 1440ms (self-contained reproducer included) To: Mauro Gatti , pgsql-performance@lists.postgresql.org References: Content-Language: en-US From: Andrei Lepikhov In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------5dqdi8p14ttt7c0amcVxikPs Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 5/3/26 17:25, Mauro Gatti wrote: > ## Questions for the community Thanks for stable reproduction! > > 1. Was there a specific commit in the PG 16 cycle that changed how >    the planner evaluates join orderings for LEFT JOINs, possibly >    related to the Right Anti Join work or outer join commutation? Your case is typical for 'never executed' nodes. As you can see, the costs of your query plans are very close, and the estimation error is large due to multiple clauses in your filter. As I see, for the planner, there is no difference in which version of the plan to choose - it is just a game of chance. There were lots of commits - each of them might trigger this slight change. On PG18, I see an even more optimal query plan than on 16 (see explain.txt). The main problem with your query is the use of multi-clause expressions. And fix is typical - create extension statistics like the following: CREATE STATISTICS option_rules_ext ON brand_id,line_code,model_year,model_code,version_code FROM option_rules; CREATE STATISTICS product_options_ext ON brand_id,line_code,model_year,model_code,version_code FROM product_options; CREATE STATISTICS pricelist_options_ext ON brand_id,line_code,model_year,model_code,version_code,pricelist_id FROM pricelist_options; This solution is not ideal, but no one database system is fully ready for multi-clause expressions yet. -- regards, Andrei Lepikhov, pgEdge --------------5dqdi8p14ttt7c0amcVxikPs Content-Type: text/plain; charset=UTF-8; name="explain.txt" Content-Disposition: attachment; filename="explain.txt" Content-Transfer-Encoding: base64 IE5lc3RlZCBMb29wIExlZnQgSm9pbiAgKGNvc3Q9Ni4xMy4uNTUwLjY4IHJvd3M9MTIgd2lk dGg9NjIxKSAoYWN0dWFsIHJvd3M9MC4wMCBsb29wcz0xKQogICAtPiAgSGFzaCBMZWZ0IEpv aW4gIChjb3N0PTUuNjkuLjQ0OC45MiByb3dzPTEyIHdpZHRoPTUxNSkgKGFjdHVhbCByb3dz PTAuMDAgbG9vcHM9MSkKICAgICAgICAgSGFzaCBDb25kOiAocGwudGF4X2lkID0gdGMudGF4 X2lkKQogICAgICAgICAtPiAgTmVzdGVkIExvb3AgTGVmdCBKb2luICAoY29zdD0xLjcyLi40 NDQuOTEgcm93cz0xMiB3aWR0aD00MDcpIChhY3R1YWwgcm93cz0wLjAwIGxvb3BzPTEpCiAg ICAgICAgICAgICAgIC0+ICBOZXN0ZWQgTG9vcCAgKGNvc3Q9MC44Ni4uMjQxLjY2IHJvd3M9 MTIgd2lkdGg9MjA5KSAoYWN0dWFsIHJvd3M9MC4wMCBsb29wcz0xKQogICAgICAgICAgICAg ICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBpeF9wcmljZWxpc3Rfb3B0aW9uc18xIG9u IHByaWNlbGlzdF9vcHRpb25zIHBsICAoY29zdD0wLjQzLi44MC45MCByb3dzPTE5IHdpZHRo PTEwNikgKGFjdHVhbCByb3dzPTE2NS4wMCBsb29wcz0xKQogICAgICAgICAgICAgICAgICAg ICAgICAgICBJbmRleCBDb25kOiAoKGJyYW5kX2lkID0gMTApIEFORCAoKGxpbmVfY29kZSk6 OnRleHQgPSAnQUJDJzo6dGV4dCkgQU5EICgobW9kZWxfeWVhcik6OnRleHQgPSAnWVInOjp0 ZXh0KSBBTkQgKChtb2RlbF9jb2RlKTo6dGV4dCA9ICdBQkMnOjp0ZXh0KSBBTkQgKCh2ZXJz aW9uX2NvZGUpOjp0ZXh0ID0gJ1ZFUi0wMDEnOjp0ZXh0KSBBTkQgKHByaWNlbGlzdF9pZCA9 IDEwMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4IFNlYXJjaGVzOiAxCiAg ICAgICAgICAgICAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHBrX3Byb2R1Y3Rfb3B0 aW9ucyBvbiBwcm9kdWN0X29wdGlvbnMgcG8gIChjb3N0PTAuNDMuLjguNDYgcm93cz0xIHdp ZHRoPTEwMykgKGFjdHVhbCByb3dzPTAuMDAgbG9vcHM9MTY1KQogICAgICAgICAgICAgICAg ICAgICAgICAgICBJbmRleCBDb25kOiAoKGJyYW5kX2lkID0gMTApIEFORCAoKGxpbmVfY29k ZSk6OnRleHQgPSAnQUJDJzo6dGV4dCkgQU5EICgobW9kZWxfeWVhcik6OnRleHQgPSAnWVIn Ojp0ZXh0KSBBTkQgKChtb2RlbF9jb2RlKTo6dGV4dCA9ICdBQkMnOjp0ZXh0KSBBTkQgKCh2 ZXJzaW9uX2NvZGUpOjp0ZXh0ID0gJ1ZFUi0wMDEnOjp0ZXh0KSBBTkQgKChvcHRpb25fdHlw ZSk6OnRleHQgPSAocGwub3B0aW9uX3R5cGUpOjp0ZXh0KSBBTkQgKChvcHRpb25fY29kZSk6 OnRleHQgPSAocGwub3B0aW9uX2NvZGUpOjp0ZXh0KSkKICAgICAgICAgICAgICAgICAgICAg ICAgICAgSW5kZXggU2VhcmNoZXM6IDE2NQogICAgICAgICAgICAgICAtPiAgTmVzdGVkIExv b3AgTGVmdCBKb2luICAoY29zdD0wLjg1Li4xNi45MyByb3dzPTEgd2lkdGg9MTk4KSAobmV2 ZXIgZXhlY3V0ZWQpCiAgICAgICAgICAgICAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5n IHBrX29wdGlvbl9ydWxlcyBvbiBvcHRpb25fcnVsZXMgcnVsZXMgIChjb3N0PTAuNDIuLjgu NDYgcm93cz0xIHdpZHRoPTk1KSAobmV2ZXIgZXhlY3V0ZWQpCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIEluZGV4IENvbmQ6ICgoYnJhbmRfaWQgPSAxMCkgQU5EICgobGluZV9jb2Rl KTo6dGV4dCA9ICdBQkMnOjp0ZXh0KSBBTkQgKChtb2RlbF95ZWFyKTo6dGV4dCA9ICdZUic6 OnRleHQpIEFORCAoKG1vZGVsX2NvZGUpOjp0ZXh0ID0gJ0FCQyc6OnRleHQpIEFORCAoKHZl cnNpb25fY29kZSk6OnRleHQgPSAnVkVSLTAwMSc6OnRleHQpIEFORCAoKG9wdGlvbl90eXBl KTo6dGV4dCA9IChwbC5vcHRpb25fdHlwZSk6OnRleHQpIEFORCAoKG9wdGlvbl9jb2RlKTo6 dGV4dCA9IChwbC5vcHRpb25fY29kZSk6OnRleHQpKQogICAgICAgICAgICAgICAgICAgICAg ICAgICBJbmRleCBTZWFyY2hlczogMAogICAgICAgICAgICAgICAgICAgICAtPiAgSW5kZXgg U2NhbiB1c2luZyBwa19wcm9kdWN0X29wdGlvbnMgb24gcHJvZHVjdF9vcHRpb25zIHBvMiAg KGNvc3Q9MC40My4uOC40NiByb3dzPTEgd2lkdGg9MTAzKSAobmV2ZXIgZXhlY3V0ZWQpCiAg ICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6ICgoYnJhbmRfaWQgPSAxMCkg QU5EICgobGluZV9jb2RlKTo6dGV4dCA9ICdBQkMnOjp0ZXh0KSBBTkQgKChtb2RlbF95ZWFy KTo6dGV4dCA9ICdZUic6OnRleHQpIEFORCAoKG1vZGVsX2NvZGUpOjp0ZXh0ID0gJ0FCQyc6 OnRleHQpIEFORCAoKHZlcnNpb25fY29kZSk6OnRleHQgPSAnVkVSLTAwMSc6OnRleHQpIEFO RCAoKG9wdGlvbl90eXBlKTo6dGV4dCA9IChydWxlcy5zZWNfb3B0aW9uX3R5cGUpOjp0ZXh0 KSBBTkQgKChvcHRpb25fY29kZSk6OnRleHQgPSAocnVsZXMuc2VjX29wdGlvbl9jb2RlKTo6 dGV4dCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4IFNlYXJjaGVzOiAwCiAg ICAgICAgIC0+ICBIYXNoICAoY29zdD0yLjg4Li4yLjg4IHJvd3M9ODggd2lkdGg9MTA4KSAo bmV2ZXIgZXhlY3V0ZWQpCiAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0YXhfY29k ZXMgdGMgIChjb3N0PTAuMDAuLjIuODggcm93cz04OCB3aWR0aD0xMDgpIChuZXZlciBleGVj dXRlZCkKICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgaXhfcHJpY2VsaXN0X29wdGlvbnNfMSBv biBwcmljZWxpc3Rfb3B0aW9ucyBwbF9jaGVjayAgKGNvc3Q9MC40My4uOC40NyByb3dzPTEg d2lkdGg9MTA2KSAobmV2ZXIgZXhlY3V0ZWQpCiAgICAgICAgIEluZGV4IENvbmQ6ICgoYnJh bmRfaWQgPSBydWxlcy5icmFuZF9pZCkgQU5EICgobGluZV9jb2RlKTo6dGV4dCA9IChydWxl cy5saW5lX2NvZGUpOjp0ZXh0KSBBTkQgKChtb2RlbF95ZWFyKTo6dGV4dCA9IChydWxlcy5t b2RlbF95ZWFyKTo6dGV4dCkgQU5EICgobW9kZWxfY29kZSk6OnRleHQgPSAocnVsZXMubW9k ZWxfY29kZSk6OnRleHQpIEFORCAoKHZlcnNpb25fY29kZSk6OnRleHQgPSAocnVsZXMudmVy c2lvbl9jb2RlKTo6dGV4dCkgQU5EIChwcmljZWxpc3RfaWQgPSAxMDApKQogICAgICAgICBG aWx0ZXI6ICgoKG9wdGlvbl90eXBlKTo6dGV4dCA9IChydWxlcy5zZWNfb3B0aW9uX3R5cGUp Ojp0ZXh0KSBBTkQgKChvcHRpb25fY29kZSk6OnRleHQgPSAocnVsZXMuc2VjX29wdGlvbl9j b2RlKTo6dGV4dCkpCiAgICAgICAgIEluZGV4IFNlYXJjaGVzOiAwCiBQbGFubmluZyBUaW1l OiA1LjQ1NiBtcwogRXhlY3V0aW9uIFRpbWU6IDIuMjcyIG1z --------------5dqdi8p14ttt7c0amcVxikPs--