sql - 替换 SQL 中性能不佳的游标
问题描述
我已经使用游标编写了一个 sql 语句,但不幸的是性能很差。我运行它的数据集大约有 800 万条记录。
游标使用带有一些正则表达式(大约 100 个)的表来尝试从列数据本身中提取部分。
FOR cur_row AS r_cursor(x)
DO
SELECT SUBSTR_REGEXPR(cur_row.REGEX_PATTERN IN im_str GROUP cur_row.REGEX_GROUP) INTO col_part FROM DUMMY;
IF :col_part IS NOT NULL THEN
SELECT LTRIM(RTRIM(col_part)) FROM DUMMY; //some more assignments go there
BREAK;
ELSE
col_part = im_str;
END IF;
END FOR;
不幸的是,对于那些 8m 记录,这需要 40 分钟。有谁知道我该如何重写它?(我正在使用 SAP HANA)
解决方案
不要对游标的每一行使用 reg ex,而是从可能的较小数据集开始。使用初始过滤器使您的数据集尽可能小。
我不知道 SAP HANA 语法,但在伪代码中:
将记录选择到 temptable 中,其中字段包含搜索条件
为 temptable 中的每一行做一些事情
推荐阅读
- r - 如何将计算的行添加到小标题?
- ansible - 如何获取执行的输出
- mongodb - pymongo 文本搜索 MongoDB 4.4 版
- javascript - 求简单函数的时间复杂度
- java - 从 JAVA 中的 HTTP 响应中获取字符串列表
- java - Log4j2 我可以在 log4j2 的模式布局中包含用户名吗?
- excel - 工作表更改宏 - Excel 2016
- html - HTML 中的 _main 和 _blank 标签有什么区别?
- laravel-mix - 升级到 Laravel MIX 6 后传入环境变量
- reactjs - 我如何解决 react useEffect 问题?