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 1wBGGd-000tHm-1A for pgsql-hackers@arkaria.postgresql.org; Fri, 10 Apr 2026 18:07:43 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wBGGb-00Dwgm-2U for pgsql-hackers@arkaria.postgresql.org; Fri, 10 Apr 2026 18:07:42 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wBGGb-00Dwgc-1a for pgsql-hackers@lists.postgresql.org; Fri, 10 Apr 2026 18:07:42 +0000 Received: from mail-ot1-x32c.google.com ([2607:f8b0:4864:20::32c]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wBGGa-00000000Oc6-0R00 for pgsql-hackers@lists.postgresql.org; Fri, 10 Apr 2026 18:07:42 +0000 Received: by mail-ot1-x32c.google.com with SMTP id 46e09a7af769-7dbb6c072f1so2195479a34.2 for ; Fri, 10 Apr 2026 11:07:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775844458; x=1776449258; darn=lists.postgresql.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=/q8e1oaMHbe2Pv+HUCBmZy2zBwnUCSd9EgALl0nvex8=; b=ZvLutdtTgWooik/+pS4Ba/hL6pMxAKnLgAIvj4mDJAMjNkCw23eJ/0LzPKtOeOGDfr mGpZnItjEAIJEkXseQMT26ziHYZK5CwvLqqhn++kWGsq1303t5hlJ5IGb6efGdzW5ysq TVNLFcukylT0iCJqvzNNCCCCHhHKiRWhfXHAAupbPF1UQmilz9QvQZ44SyA+M0FWuEkC zpkb+MZ4h12QW64EFm33BcIwqdKSd8TUfyUF561qE1Vc8dF/8olqZAZeMjbEniGB8Cev 40ewj1/HP+UVv1r/3By9NfXGJbA/ECLGD0XYjfIej67+cpAWUFuUljGxQRGrqCkkGWON aWhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775844458; x=1776449258; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=/q8e1oaMHbe2Pv+HUCBmZy2zBwnUCSd9EgALl0nvex8=; b=V9siLEH/dV8D8K03WTIu9lvSRJIWJ8Jyo1yFi8scIvsFxq2P5+abBZ1ZZ+C9n5+C3E RW9Qx5TMVo9+6N5fDAuDQXGzhGpytyRXE+Nbs+n7A+TeDXALFmVDMAM7krX1VYwZCZ0G +4VGb2wwFM8aKUUqXKGzi03sAhC2M7b3doTp6s7Er5F5IXJFW6Te0YIQaTZPnyBk6iVo pu9/vYY6jspQuz+X2rmi6MVkmt7t0dvwVU/xG8urw/RSXJ+xGQvEgGvGxIFd4njxUWGy 4E3Pw5IVBhJfUysBSLI836EGaVKeCFdG7XZ/05C4tfFmscew0KaOq13RAZqUj+hLpS2E g4ew== X-Gm-Message-State: AOJu0YxvQ3Q3h5qcNI6vPisaLXnabAXADPigQ0dGxtY7jQ5dr8SmqSTF ta7GSikwdN+dXnNd4dWAjWqdG/d2REZ5Ptfnlxql7eEQwxZVWM7itaL9 X-Gm-Gg: AeBDiev/gC6/3YHTeiaJgoh5YEX/PSKYKdInnAb/Sxid9XgwTl8RBSRZeoQVb/1HQuP svifGbql6K9zvGS5mDYF2NfgFx56WJKKezimc32VoTNLim4LfV9rISIJheGYhBYhi/QpzljO91m qqy+7wKaZrhZBcEY+QZwnHaoerzQGxyDRj/rbms61ls+CguCwzvfw9JlKwxvAf72roYRLgiuHy5 JtT/pbwWeBwvUwQSguLZWNi42w59GQiZyZ4YR+NVvIwkz5FFcuTON21iam0oFuJZxQpo1dySGcJ NpKM8SAYH5VPiDBxEjXzAsOlNQwBIquinA6PLh74m5xsD8+wguw9U9gQUDxYHYeSFjl0xhGWk71 JyMvyxBUekXU4lpNzP5ZLqDLo5O09IywBe8f2P7nljLgDcRc3zzjH10FnWELMsog+T1g+ypnwgQ tgdfZIgitmHVUNNo3mF8wsO42iLO9NvOUuymZYwHLLgh64WUZHNlPs6d+mqzfkcY4dPHS3zQivq 88NYKRCwxQ1Ee9OY1rZVQ== X-Received: by 2002:a05:6820:199b:b0:681:6a53:6662 with SMTP id 006d021491bc7-68be5e56a57mr1973298eaf.13.1775844458283; Fri, 10 Apr 2026 11:07:38 -0700 (PDT) Received: from nathan (162-195-168-172.lightspeed.stlsmo.sbcglobal.net. [162.195.168.172]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-68bcb882465sm2077308eaf.15.2026.04.10.11.07.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Apr 2026 11:07:37 -0700 (PDT) Date: Fri, 10 Apr 2026 13:07:35 -0500 From: Nathan Bossart To: CharSyam Cc: pgsql-hackers@lists.postgresql.org Subject: Re: [PATCH] Use cached hash to skip unnecessary key comparisons in dshash Message-ID: References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk On Sat, Apr 11, 2026 at 01:09:33AM +0900, CharSyam wrote: > This patch adds a hash pre-check (item->hash == hash) before calling > equal_keys() in both find_in_bucket() and delete_key_from_bucket(). > Items with non-matching hash values are skipped with a single integer > comparison, avoiding the expensive key comparison entirely. This relies on the fact that matching keys will have matching hashes, but matching hashes does not necessarily imply matching keys. IIUC this is a safe assumption, although a short comment to this effect might be a nice addition. > Test | Before | After | Improvement > -------------------------+-----------+-----------+------------ > INSERT 10000 entries | 14.99 ms | 9.46 ms | ~37% > LOOKUP 10000 hits | 10.40 ms | 5.52 ms | ~47% > LOOKUP 10000 misses | 8.41 ms | 4.95 ms | ~41% > LOOKUP 50000 hits (x5) | 33.48 ms | 26.44 ms | ~21% > > The improvement is most significant when bucket chains are longer and key > comparison is expensive (e.g., string keys). Nice results. Are there any regressions when the bucket chains are short or when key comparisons are inexpensive? > I believe this patch is ready for review. I look forward to any feedback > and am happy to make revisions. We are in feature-freeze for PostgreSQL v19 now, so this will unfortunately need to wait until July when v20 development begins. Please add an entry to the commitfest site to ensure this doesn't get lost: https://commitfest.postgresql.org/ -- nathan