gpt4 book ai didi

在 Select LIKE 中使用通配符 % 时的性能

转载 作者:行者123 更新时间:2023-12-04 02:32:02 25 4
gpt4 key购买 nike

我有以下非常缓慢且效率低下的语句,我想在其中选择 e071 中的所有条目,其中 obj_name 字段包含 tadir 中 obj_name 字段的值,后跟通配符。

LOOP AT tadir ASSIGNING <fs_tadir>.

CONCATENATE <fs_tadir>-obj_name '%' INTO gv_obj_name.

SELECT * FROM e071 APPENDING TABLE gt_e071
WHERE obj_name LIKE gv_obj_name.

ENDLOOP.

由于您不能将 LIKE 语句与“For all entries in”或连接一起使用,是否有任何方法可以提高效率?

最佳答案

LIKE 对于数据库来说是非常糟糕的,因为你在一个循环中有这个 like 你很可能在每个循环迭代中扫描整个 E071。您应该尝试交换它并选择 E071 中的所有内容,然后检查 SELECT...ENDSELECT 中的表。我知道这听起来有违直觉,但它在我们构建的自定义 REGUH 索引上救了我一命。

SELECT * FROM e071 APPENDING TABLE gt_e071 
WHERE obj_name LIKE gv_obj_name.

READ TABLE tadir WITH KEY.... ASSIGNING <fs_tadir>.

ENDSELECT.

作为一种替代方法,而不是使用单个选择,例如构建一系列值并将它们批量发送到选择。它仍然会表现不佳但会更好。

data lt_obj_range type range of e071-obj_name.
data ls_obj_range like line of lt_obj_range.

LOOP AT tadir ASSIGNING <fs_tadir>.
ls_obj_range-sign = 'I'.
ls_obj_range-option = 'CP'.
CONCATENATE <fs_tadir>-obj_name '*' INTO ls_obj_range-low.
append ls_obj_range to lt_obj_range.

endloop.

SELECT * FROM e071 APPENDING TABLE gt_e071
WHERE obj_name it lt_obj_range.

请注意,数据库对 select 语句的大小有限制,因此如果您的范围内的项目太多,您将得到一个简短的转储,因此将其分成大约 200-300 行的范围。

关于在 Select LIKE 中使用通配符 % 时的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19718991/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com