You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

YugabyteDB中SELECT查询使用yb_hash_code的可行性咨询

问题:修复#12094后是否建议在SELECT查询中使用yb_hash_code()?

表结构

CREATE TABLE IF NOT EXISTS public.table1(
customer_id uuid NOT NULL ,
item_id uuid NOT NULL ,
kind character varying(100) NOT NULL ,
details character varying(100) NOT NULL ,
created_date timestamp without time zone NOT NULL,
modified_date timestamp without time zone NOT NULL,
CONSTRAINT table1_pkey PRIMARY KEY (customer_id, kind, item_id)
);

CREATE UNIQUE INDEX IF NOT EXISTS unique_item_id ON table1(item_id);

CREATE UNIQUE INDEX IF NOT EXISTS unique_item ON table1(customer_id, kind) WHERE kind='NEW' OR kind='BACKUP';

查询性能对比

带小范围yb_hash_code条件的查询(性能最优)

EXPLAIN ANALYZE select item_id from table1 WHERE yb_hash_code(item_id) >= 0 and yb_hash_code (item_id) < 1395 and modified_date < date '2022-04-08';
Planning Time: 7.967 ms
Execution Time: 82.929 ms

不带yb_hash_code条件的查询(性能最差)

EXPLAIN ANALYZE select item_id from table1 WHERE modified_date < date '2022-04-08';
Planning Time: 0.054 ms
Execution Time: 4618.350 ms

带全范围yb_hash_code条件的查询(性能接近无hash条件)

EXPLAIN ANALYZE select item_id from table1 WHERE yb_hash_code(item_id) >= 0 and yb_hash_code(item_id) <=65535 and modified_date < date '2022-04-08';
Planning Time: 0.073 ms
Execution Time: 4565.615 ms

带稍大一点小范围yb_hash_code条件的查询(性能依旧优异)

EXPLAIN ANALYZE select item_id from table1 WHERE yb_hash_code(item_id) >= 0 and yb_hash_code(item_id) < 1490 and modified_date < date '2022-04-08';
Planning Time: 0.148 ms
Execution Time: 84.737 ms

核心提问

修复GitHub上的#12094问题后,是否建议在SELECT查询中开始使用yb_hash_code()?


回答

  1. 先明确性能差异的根源
    YugabyteDB是分布式数据库,数据按哈希值分片存储。指定小范围的yb_hash_code(item_id)条件,能让查询仅命中部分分片,避免全分片扫描;而不带hash条件或指定全范围hash条件时,查询会遍历所有分片,这就是性能差距极大的原因。

  2. 修复#12094后的使用建议

    • 仅作为临时优化方案:如果你的查询无法通过建立合适索引(比如给modified_date单独建索引,或创建包含modified_date的复合索引)来优化,且能接受增加代码复杂度(比如拆分查询为多个小hash区间的子查询再合并结果),可以用这种方式提升性能。
    • 优先选择常规优化手段:使用yb_hash_code需要手动匹配集群的分片hash区间,一旦分片数调整,区间范围也要同步修改,维护成本高。常规优化还是优先考虑索引调整、查询条件优化,这才是更可持续的方案。
    • #12094修复的价值:该修复解决了yb_hash_code相关的功能问题(比如哈希计算准确性、查询计划生成逻辑),但不代表它成为了常规优化手段,只是让它在必要场景下可以安全使用。

内容的提问来源于stack exchange,提问作者dh YB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 02:54:23