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()?
回答
先明确性能差异的根源
YugabyteDB是分布式数据库,数据按哈希值分片存储。指定小范围的yb_hash_code(item_id)条件,能让查询仅命中部分分片,避免全分片扫描;而不带hash条件或指定全范围hash条件时,查询会遍历所有分片,这就是性能差距极大的原因。修复#12094后的使用建议
- 仅作为临时优化方案:如果你的查询无法通过建立合适索引(比如给
modified_date单独建索引,或创建包含modified_date的复合索引)来优化,且能接受增加代码复杂度(比如拆分查询为多个小hash区间的子查询再合并结果),可以用这种方式提升性能。 - 优先选择常规优化手段:使用
yb_hash_code需要手动匹配集群的分片hash区间,一旦分片数调整,区间范围也要同步修改,维护成本高。常规优化还是优先考虑索引调整、查询条件优化,这才是更可持续的方案。 - #12094修复的价值:该修复解决了
yb_hash_code相关的功能问题(比如哈希计算准确性、查询计划生成逻辑),但不代表它成为了常规优化手段,只是让它在必要场景下可以安全使用。
- 仅作为临时优化方案:如果你的查询无法通过建立合适索引(比如给
内容的提问来源于stack exchange,提问作者dh YB
相关产品推荐
相关产品推荐

