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

如何基于binary类型列的前5位十六进制数进行高效范围筛选

最优方案:原生二进制范围匹配(索引友好,性能最高)

该方案不需要对查询字段做任何函数处理,可以直接命中binaryColumn上的索引,适合大数据量场景。
原理:binary(3)类型固定占3字节,对应6位十六进制字符。你需要匹配的前5位十六进制固定时,最后1位可以是0~F的任意值,因此可以直接将前5位的区间转换为完整6位十六进制的范围:

  • 区间下界:前5位取最小值00001,最后1位补最小值0,得到0x000010
  • 区间上界:前5位取最大值00012,最后1位补最大值F,得到0x00012F

查询语句如下:

SELECT * FROM myTable
WHERE binaryColumn >= 0x000010
  AND binaryColumn <= 0x00012F;

方案2:位移运算匹配(动态前缀场景适用,性能次之)

如果前缀是动态生成的,可以用位移运算移除最后4位二进制位(对应最后1位十六进制),直接得到前5位十六进制对应的数值做匹配,不需要做字符串转换:

SELECT * FROM myTable
WHERE (binaryColumn >> 4) BETWEEN 0x00001 AND 0x00012;

注意:不同数据库的位运算语法略有差异,MySQL、PostgreSQL支持>>右移运算符,Oracle可以用BITAND+移位函数实现,核心逻辑一致。

方案3:字符串截取匹配(仅适合小表场景)

如果需要显式获取前5位十六进制字符做匹配,可以先将二进制列转为十六进制字符串再截取,该方案无法用到索引,仅适合数据量小的场景:
以MySQL为例:

SELECT * FROM myTable
WHERE LEFT(HEX(binaryColumn), 5) BETWEEN '00001' AND '00012';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:36:01