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.94.2) (envelope-from ) id 1tXBIf-004Zy4-3E for pgsql-hackers@arkaria.postgresql.org; Mon, 13 Jan 2025 03:39:37 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1tXBIc-006Ja8-0W for pgsql-hackers@arkaria.postgresql.org; Mon, 13 Jan 2025 03:39:34 +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.94.2) (envelope-from ) id 1tXBIb-006JZz-Iv for pgsql-hackers@lists.postgresql.org; Mon, 13 Jan 2025 03:39:34 +0000 Received: from mail-pl1-x635.google.com ([2607:f8b0:4864:20::635]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tXBIa-0006gK-2l for pgsql-hackers@postgresql.org; Mon, 13 Jan 2025 03:39:33 +0000 Received: by mail-pl1-x635.google.com with SMTP id d9443c01a7336-219f8263ae0so60423315ad.0 for ; Sun, 12 Jan 2025 19:39:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1736739571; x=1737344371; darn=postgresql.org; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=A2n7iTVUALXCKlMfqCfjO3UuTIWiLF02qRnjvYLpCKQ=; b=KsT+w6hk1n21kMO/oAu1MZ36NMCeYgFC0CjLTahUJas6QzsnF2TbClJm3w73Px/Z5f zI7m6mXTJRZ5g4ok0fZimNSRIjMw7TLgRtlMy1J4j25mfwDKPdGlRittCMhJzRP6RckT ocKJcsgD257K7zkEKEot7fJ/6j/PAZzDe/vLdKaUevZQadE0gkwV/Rcri/QdMW1iBE3I LpMc//U6WFsa87CcPz1JyBIIan479Mnxlfb9C7GRg7LZD1ZFtu5Z6z0lLO9k+bi4gic0 V3zS8OaF1vvv+Wh3uK+b5YOPhzvob0QTGpnYOlu4KLEzPZvDGZLLShRKST7fCQhgu9Aw 3hEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736739571; x=1737344371; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=A2n7iTVUALXCKlMfqCfjO3UuTIWiLF02qRnjvYLpCKQ=; b=eX7yyd3JkvoU4npcVTi03OyFXtIH+Yvnz3+EjY1f5Wrkjgpd1IcceGS39/DU/FTJRS oDnP8wB59nqwM/aGwTTpDu7+/sYxa6Kg4+oje4j6noxuUp5AWafBh0w4D/8GdILrToyn Ks4Wbfc6XD+FxVcVwG3CY8/KYErqRsIKhInnHzBjnHT4w9mmepHTpzMIk+Z+aseXINxv CMEvouYy366DymmxuC4sq414+lKn7nBnYZig8KhkRIqR5NsLdDwOHpd4jIuybzcKXqNn jkII0qBXDum2l9FsDzpbOfA2ILvysz4bVV5Krr3Ni+20vhEtQsL7W1/MX77zZ5fVtsSD OFmw== X-Forwarded-Encrypted: i=1; AJvYcCUbdk0/hTD+zVowWNkiJGQRD+0K8szfmm/Agg/q6jHbssWmE8SGzRQr3NI86/XWvFFBq6IP5w5NjTSI+d9o@postgresql.org X-Gm-Message-State: AOJu0Yyudxm/YLySHs3ZTX/Gj8WM7Ot/fLBVjkDA+um5LOGoaT2RG9Pe 4TRMXEWAOBKuevfpiTk8/TjQ+lwaud/9CxWzZ36MbM0ZsPy4ND36GYtQTIitpr0= X-Gm-Gg: ASbGnctOLsGTUMY8hfLYjrnO5crdmYFzdxY4D9RNSrDm6P/uaEm8rSikNQBHd9laSjQ y3xqguxjEB7nyfvFdz/TtmGlm/GGrrIyZ5DCLQPxqxDANXchpxCgY5uLNI7K7HVytjFUjEDbZaA vuCfU6ohj0moXU9H2wWmcYdv8NKMUNFACdfAgfUh8kO+8Nfz02GCDYts2Y253mDOh7vdScd2sdG 5xMA2cJDWhZjYddv6SZUs5gXHtPxyjfUzwhPJf09mDc+SZrVRNQdsUhGveIolrvyMlhFWNwe9x5 qQWZ9gNa5eX0aZAImPVt+q5QStM8/FjgRw== X-Google-Smtp-Source: AGHT+IEsZZ28Pl3yv3+tcZiKPRsondYVP9N8pWp0X5ddAESaSZnih2pIJxy0R62WQGYPlyaDqgcg3Q== X-Received: by 2002:a17:902:c951:b0:215:bc30:c952 with SMTP id d9443c01a7336-21a83f4298fmr238693905ad.6.1736739570829; Sun, 12 Jan 2025 19:39:30 -0800 (PST) Received: from [10.10.20.106] (node-soh.pool-101-109.dynamic.totinternet.net. [101.109.145.49]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-21a9f21e279sm44774155ad.134.2025.01.12.19.39.25 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 12 Jan 2025 19:39:29 -0800 (PST) Content-Type: multipart/mixed; boundary="------------4MDoaihohn0fsiN9oMvGyh8M" Message-ID: Date: Mon, 13 Jan 2025 10:39:23 +0700 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: POC, WIP: OR-clause support for indexes To: Alexander Korotkov , Alena Rybakina Cc: Ranier Vilela , Alexander Lakhin , jian he , Robert Haas , Nikolay Shaplov , pgsql-hackers@lists.postgresql.org, pgsql-hackers@postgresql.org, Peter Geoghegan , Marcos Pegoraro , teodor@sigaev.ru, Peter Eisentraut References: <567ED6CA.2040504@sigaev.ru> <0026f562-d403-4f97-b9dc-3fe3a279e8c9@postgrespro.ru> <37bf870a-22e0-4aba-b845-549482118f8d@gmail.com> <8174de69-9e1a-0827-0e81-ef97f56a5939@gmail.com> <3b717020-14d9-425f-8c60-ce336b5a23b3@postgrespro.ru> <43db6a40-5c5f-4909-ad62-3060b297e686@postgrespro.ru> Content-Language: en-AU 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. --------------4MDoaihohn0fsiN9oMvGyh8M Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 1/13/25 01:39, Alexander Korotkov wrote: > The revised patch is attached. Most notably it revises > group_similar_or_args() to have the same notion of const-ness as > others. In that function we split potential index key and constant > early to save time on enumerating all possible index keys. But it > appears to be possible to split by relids bitmapsets: index key should > use our relid, while const shouldn't. Other that that, comments, > commit message and naming are revised. Hmm, I would say we should carefully review this code. Curiously, this patch has activated the dormant problem of duplicated clauses in joinorclauses. Look: EXPLAIN (COSTS OFF) SELECT * FROM bitmap_split_or t1, bitmap_split_or t2 WHERE t1.a=t2.b OR t1.a=1; Nested Loop -> Seq Scan on bitmap_split_or t2 -> Bitmap Heap Scan on bitmap_split_or t1 Recheck Cond: (((a = t2.b) OR (a = 1)) AND ((a = t2.b) OR (a = 1))) -> Bitmap Index Scan on t_a_b_idx Index Cond: ((a = ANY (ARRAY[t2.b, 1])) AND (a = ANY (ARRAY[t2.b, 1]))) It can be resolved with a single-line change (see attached). But I need some time to ponder over the changing behaviour when a clause may match an index and be in joinorclauses. -- regards, Andrei Lepikhov --------------4MDoaihohn0fsiN9oMvGyh8M Content-Type: text/x-patch; charset=UTF-8; name="joinorclauses-fix.diff" Content-Disposition: attachment; filename="joinorclauses-fix.diff" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMgYi9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jCmluZGV4IGMwMzU0N2E5OTcu LjJhODYyOThkOWQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2lu ZHhwYXRoLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYwpA QCAtMjQ0MCw3ICsyNDQwLDcgQEAgbWF0Y2hfam9pbl9jbGF1c2VzX3RvX2luZGV4KFBsYW5u ZXJJbmZvICpyb290LAogCiAJCS8qIFBvdGVudGlhbGx5IHVzYWJsZSwgc28gc2VlIGlmIGl0 IG1hdGNoZXMgdGhlIGluZGV4IG9yIGlzIGFuIE9SICovCiAJCWlmIChyZXN0cmljdGlvbl9p c19vcl9jbGF1c2UocmluZm8pKQotCQkJKmpvaW5vcmNsYXVzZXMgPSBsYXBwZW5kKCpqb2lu b3JjbGF1c2VzLCByaW5mbyk7CisJCQkqam9pbm9yY2xhdXNlcyA9IGxpc3RfYXBwZW5kX3Vu aXF1ZV9wdHIoKmpvaW5vcmNsYXVzZXMsIHJpbmZvKTsKIAogCQltYXRjaF9jbGF1c2VfdG9f aW5kZXgocm9vdCwgcmluZm8sIGluZGV4LCBjbGF1c2VzZXQpOwogCX0KZGlmZiAtLWdpdCBh L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2luZGV4Lm91dCBiL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2luZGV4Lm91dAppbmRleCA4MDExYzE0MWJmLi40 N2JkZWUxZDQxIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0 ZV9pbmRleC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfaW5k ZXgub3V0CkBAIC0zMjU1LDYgKzMyNTUsMTYgQEAgQ1JFQVRFIElOREVYIHRfYl9jX2lkeCBP TiBiaXRtYXBfc3BsaXRfb3IgKGIsIGMpOwogQ1JFQVRFIFNUQVRJU1RJQ1MgdF9hX2Jfc3Rh dCAobWN2KSBPTiBhLCBiIEZST00gYml0bWFwX3NwbGl0X29yOwogQ1JFQVRFIFNUQVRJU1RJ Q1MgdF9iX2Nfc3RhdCAobWN2KSBPTiBiLCBjIEZST00gYml0bWFwX3NwbGl0X29yOwogQU5B TFlaRSBiaXRtYXBfc3BsaXRfb3I7CitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBG Uk9NIGJpdG1hcF9zcGxpdF9vciB0MSwgYml0bWFwX3NwbGl0X29yIHQyIFdIRVJFIHQxLmE9 dDIuYiBPUiB0MS5hPTE7CisgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgLT4gIFNlcSBTY2Fu IG9uIGJpdG1hcF9zcGxpdF9vciB0MgorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgdF9hX2Jf aWR4IG9uIGJpdG1hcF9zcGxpdF9vciB0MQorICAgICAgICAgSW5kZXggQ29uZDogKGEgPSBB TlkgKEFSUkFZW3QyLmIsIDFdKSkKKyg0IHJvd3MpCisKIEVYUExBSU4gKENPU1RTIE9GRikK IFNFTEVDVCAqIEZST00gYml0bWFwX3NwbGl0X29yIFdIRVJFIGEgPSAxIEFORCAoYiA9IDEg T1IgYiA9IDIpIEFORCBjID0gMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgIApkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvcmVncmVzcy9zcWwvY3JlYXRlX2luZGV4LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L2NyZWF0ZV9pbmRleC5zcWwKaW5kZXggMDY4YzY2Yjk1YS4uYmMxMmQyZjA5OCAxMDA2NDQK LS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY3JlYXRlX2luZGV4LnNxbAorKysgYi9zcmMv dGVzdC9yZWdyZXNzL3NxbC9jcmVhdGVfaW5kZXguc3FsCkBAIC0xMzY3LDYgKzEzNjcsOCBA QCBDUkVBVEUgU1RBVElTVElDUyB0X2FfYl9zdGF0IChtY3YpIE9OIGEsIGIgRlJPTSBiaXRt YXBfc3BsaXRfb3I7CiBDUkVBVEUgU1RBVElTVElDUyB0X2JfY19zdGF0IChtY3YpIE9OIGIs IGMgRlJPTSBiaXRtYXBfc3BsaXRfb3I7CiBBTkFMWVpFIGJpdG1hcF9zcGxpdF9vcjsKIEVY UExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gYml0bWFwX3NwbGl0X29yIHQxLCBi aXRtYXBfc3BsaXRfb3IgdDIgV0hFUkUgdDEuYT10Mi5iIE9SIHQxLmE9MTsKK0VYUExBSU4g KENPU1RTIE9GRikKIFNFTEVDVCAqIEZST00gYml0bWFwX3NwbGl0X29yIFdIRVJFIGEgPSAx IEFORCAoYiA9IDEgT1IgYiA9IDIpIEFORCBjID0gMjsKIERST1AgVEFCTEUgYml0bWFwX3Nw bGl0X29yOwogCg== --------------4MDoaihohn0fsiN9oMvGyh8M--