第六篇 - 枚举字段条件过滤--SPL轻量级文件存储提速查询实践

简介: 针对枚举字段过滤时,传统方法需多次比较,性能随取值数量增加而下降。esProc SPL 引入对位序列机制,将条件判断转化为布尔序列的位置取值,避免逐条比较,大幅提升查询效率。通过预生成与维表等长的对位序列,实现常数时间过滤,尤其适用于大表多值筛选场景,性能提升显著。

枚举字段的取值是有限几种值,针对枚举字段 f 的过滤条件写成 f =v1 or f=v2 or…或者 f !=v1 and f !=v2 and…,也可能写成 in 或者 not in。数据库要用 f 与 n 个值比较计算,数据表较大的时候比较次数会很多,性能就会比较差,而且 n 越大性能越差。

如果在过滤的时候,能不再做比较,性能自然大幅提高。esProc SPL 提供的对位序列机制可以起到这样的作用。

下面通过订单表的例子来看怎样使用对位序列。先确定枚举字段的取值范围,字段 customer_id 有对应维表,取值范围已经确定了。字段 employee_id,employee_name 没有对应维表,需要预先遍历事实表 orders 确定取值范围,生成维表。这里假设没有 employee_id 这个字段,且雇员没有同名的。

前面第三篇已经生成了维表 employee.btx,orders 使用前面的 ordersQ3.ctx,employee 已序号化。

例 6.1 找出雇员是 name10 或 name101 的订单,按日期统计订单数。

select order_date,count(1)
from orders
where 
    employee_name='name10' or employee_name='name101'
group by order_date;

执行时间 20 秒。

SPL 代码 27:
image.png
执行时间 0.1 秒。

重点看 A3 利用过滤条件生成对位序列:

6b842476cd90759b3028098b8b4f1dee_1749006573437100.png
图中左边是 employee 表,右边是对位序列。

对位序列是和维表 employee 等长的布尔值序列。函数 contain 判断 [“name10”,“name101”] 是否包含当前位置 name 值,包含则对位序列同样位置的成员被赋值成 true,否则就是 false。

有了对位序列,A4 就可以用来过滤了:
8388e1fd7474a08f3c61fe50e94b4ad1_1749006573507100.png
对订单表(图中间)过滤,常规计算是用 employee_num 去 employee 表(图左边)对应位置取 name,然后和 [“name10”,“name101”] 比较。

SPL 则用序号去对位序列(图右边)中取对应位置的布尔值,是 true 表示满足条件,否则就是不满足。这就不需要比较 name 了,把比较运算转化成了按位置取序列成员。

我们看不用对位序列的写法。

SPL 代码 28:
image.png
A2 条件过滤需要比较字符串是否相同。

执行时间:0.1 秒

例 6.2 找出雇员是 name10 等 10 人的订单,按日期统计订单数。

这个例子要写 or 就有点多了,SQL 用 in 写:

select order_date,count(1)
from orders
where 
    employee_name in ('name10' , 'name101',) 
group by order_date;

执行时间 16 秒。

SPL 代码 29:采用对位序列的写法。
image.png
执行时间 0.15 秒

代码在上面基础上增加待比较的雇员名即可。

SPL 代码 30:不使用对位序列。
image.png
执行时间:0.18 秒。

例 6.3 找出客户城市编号是 35 的订单,统计总运费。

SQL 要使用子查询:

select sum(shipping_fee)
from orders
where 
    customer_id in (
        select customer_id
        from customer
        where city_id=35);

执行时间:13 秒。

SPL 代码 31:使用对位序列。
image.png
执行时间 0.1 秒

SPL 代码 32:不使用对位序列。
image.png
执行时间:0.1 秒。

用 cutomer_id 主键查找计算和按位置取成员的差别不明显。

性能小结:
image.png
请动手练习:

1、找出客户城市编号是 3 的订单,统计总订单数。

2、思考:在自己熟悉的数据库中有没有大表枚举字段过滤计算?是否可以用对位序列提速?

相关文章
|
6月前
|
人工智能 运维 算法
机器视觉公司有哪些:德创测控引领,产教融合优选指南​
本文依据权威报告,结合产教适配度、技术成熟度与服务保障力,推荐苏州德创、海康机器人、凌云光、大恒图像、华数机器人五家机器视觉公司,助力用户科学决策。
|
6月前
|
存储 算法 Java
深入理解JVM:内存管理与垃圾回收机制探索
JVM是Java程序的运行核心,实现跨平台、自动内存管理与高效执行。其架构包括类加载、运行时数据区、执行引擎等模块。内存模型历经演变,JDK 8起以元空间替代永久代,优化GC性能。JVM通过分代回收机制,结合标记清除、复制、整理等算法,管理对象生命周期,提升系统稳定性与性能。
|
6月前
|
消息中间件 人工智能 Apache
Apache RocketMQ × AI:面向 Multi-Agent 的事件驱动架构
本文介绍基于Apache RocketMQ构建异步化Multi-Agent系统的新架构,通过语义化Topic实现Agent能力发现,利用Lite-Topic支持轻量级异步通信与结果反馈,结合InterestSet+ReadySet事件驱动模型,高效支撑任务闭环、状态恢复与动态编排,为Agentic AI提供高扩展、低延迟的协同机制。
|
6月前
|
消息中间件 人工智能 Apache
Apache RocketMQ × AI:面向 Multi-Agent 的事件驱动架构
本文介绍基于Apache RocketMQ构建异步化Multi-Agent系统的新架构,通过语义化Topic实现Agent能力发现,利用Lite-Topic支持轻量级异步通信与结果反馈,结合InterestSet+ReadySet事件驱动模型,高效支撑任务闭环、状态恢复与动态编排,为Agentic AI提供高扩展、低延迟的协同机制。
|
6月前
|
数据采集 存储 安全
一文讲清数据要素,数据资产,数据治理和数字资产
本文系统梳理了数据要素、数据资产、数据治理与数字资产四大核心概念。数据要素确立数据作为基础生产要素的战略地位;数据资产是企业可控制并带来经济利益的数据资源;数据治理是保障数据质量与安全的管理框架;数字资产则是涵盖数据资产在内的所有数字化有价值资产的统称。厘清四者关系,构建清晰数据认知体系,助力企业高效决策与价值实现。
|
6月前
|
人工智能 运维 安全
云栖专刊 | 深度解读阿里云网络全新能力升级,助力企业出海和AI创新
阿里云飞天洛神云网络在2025云栖大会发布全新升级,聚焦企业出海与AI创新,推出确定性网络、智能云网络及AI for Network三大能力,提升全球连接质量,构建高效、安全、智能的云网络底座。
849 8
云栖专刊 | 深度解读阿里云网络全新能力升级,助力企业出海和AI创新
|
6月前
|
存储 域名解析 缓存
DNS工作原理:从域名到IP
每天输入域名就能访问网站,背后靠的是DNS——互联网的“地址翻译官”。它将域名智能解析为IP地址,实现快速访问。本文详解DNS记录类型(A、CNAME、MX等)与四级查询流程,助你理解“域名变IP”的全过程,轻松应对解析问题。
1308 157
|
6月前
|
人工智能 供应链 监控
2025供应链金融公司排名揭晓:聚焦科技驱动与产业赋能的领跑者
在数字化转型背景下,供应链金融成为破解中小企业融资难题的关键。本文从股东实力、科技能力、业务覆盖等维度评估主流服务商,聚焦海尔金融保理的“海创云链”生态模式,展现其以科技赋能产业链、推动产融深度融合的创新实践与行业示范价值。
731 0
|
6月前
|
人工智能 UED
2025年数字人全链路智能创作平台完全指南
AI数字人成内容创作新利器!本文解析必火三大技术引擎、分钟级克隆、低成本高效产出,并对比2025年主流平台,助你三步选对工具,赋能电商、培训与自媒体。
|
6月前
|
数据采集 人工智能 监控
2025年中国能源管理平台十大厂家综合实力解析与选型指南
在“双碳”背景下,能源管理成企业战略核心。本文基于技术、方案、案例与生态四大维度,权威评选出2025年十大能源管理平台厂商,涵盖树根科技、华为云、阿里云等领军者,深度剖析其优势与适用场景,助力企业实现能效提升、降本增效与可持续发展,为绿色转型提供有力支撑。
1381 0

热门文章

最新文章