首页 > 解决方案 > 替换 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)

标签: sqldatabasehana

解决方案


不要对游标的每一行使用 reg ex,而是从可能的较小数据集开始。使用初始过滤器使您的数据集尽可能小。

我不知道 SAP HANA 语法,但在伪代码中:

将记录选择到 temptable 中,其中字段包含搜索条件

为 temptable 中的每一行做一些事情


推荐阅读