AND OR组合选择性能较差

2020-09-18 23:12发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我可以提高这种选择语句的性能吗?

选择*从ZDB_TABLE1到DATA_PACKAGE中所有条目的表itab中,其中SALESORG = l_salesorg AND(SOLD_TO = DATA_PACKAGE-SOLD_TO或SHIP_TO = DATA_PACKAGE-SHIP_TO或/BIC/zfield1 = DATA_PACKAGE-/BIC)。

尽管创建了三个索引,该语句仍需要花费很长时间来执行。

salesorg + sold_to

salesorg + ship_to

salesorg + zfield1

执行计划:

选择*从" zDB_table1"中,在" SALESORG" =:A0 AND(" SOLD_TO" =:A1或" SHIP_TO" =:A2或"/img/bic/zfield1" =:A3)或" SALESORG" =:A4 AND (" SOLD_TO" =:A5 OR" SHIP_TO" =:A6 OR"/img/bic/zfield1" =:A7)OR" SALESORG" =:A8 AND(" SOLD_TO" =:A9 OR" SHIP_TO" =:A10 OR"/img/bic/zfield1" =:A11)或" SALESORG" =:A12 AND(" SOLD_TO" =:A13或" SHIP_TO" =:A14或"/img/bic/zfield1" =:A15)或" SALESORG" =:A16 AND( " SOLD_TO" =:A17或" SHIP_TO" =:A18或"/img/bic/zfield1" =:A19)

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我可以提高这种选择语句的性能吗?

选择*从ZDB_TABLE1到DATA_PACKAGE中所有条目的表itab中,其中SALESORG = l_salesorg AND(SOLD_TO = DATA_PACKAGE-SOLD_TO或SHIP_TO = DATA_PACKAGE-SHIP_TO或/BIC/zfield1 = DATA_PACKAGE-/BIC)。

尽管创建了三个索引,该语句仍需要花费很长时间来执行。

salesorg + sold_to

salesorg + ship_to

salesorg + zfield1

执行计划:

选择*从" zDB_table1"中,在" SALESORG" =:A0 AND(" SOLD_TO" =:A1或" SHIP_TO" =:A2或"/img/bic/zfield1" =:A3)或" SALESORG" =:A4 AND (" SOLD_TO" =:A5 OR" SHIP_TO" =:A6 OR"/img/bic/zfield1" =:A7)OR" SALESORG" =:A8 AND(" SOLD_TO" =:A9 OR" SHIP_TO" =:A10 OR"/img/bic/zfield1" =:A11)或" SALESORG" =:A12 AND(" SOLD_TO" =:A13或" SHIP_TO" =:A14或"/img/bic/zfield1" =:A15)或" SALESORG" =:A16 AND( " SOLD_TO" =:A17或" SHIP_TO" =:A18或"/img/bic/zfield1" =:A19)

付费偷看设置
发送
6条回答
骆驼绵羊
1楼 · 2020-09-18 23:21.采纳回答

嗨,

首先,考虑where子句的主键,并避免使用(*)字段。

如果实际的检索在where子句中没有主键,则尝试确定使用具有主键的表执行Join查询的可能性。

请考虑使用跟踪SQL工具(ST05)来识别任何已解决的问题。 示例:跟踪与ABAP%_HINTS一起使用的最佳二级索引。

此致

Cikesha
2楼-- · 2020-09-18 23:18

Cleo

也许您应该共享Ztable和Index详细信息的结构(最好与屏幕截图一起使用)和DATA_PACKAGE的结构以获取更多适当的答复。

K.Kiran。

lukcy2020
3楼-- · 2020-09-18 23:15
"尽管创建了三个索引,但该语句仍需要花费很长时间来执行。

AFAIK大多数数据库不会使用您的3个索引来获取数据,而只会使用一个索引。

因此,您应该考虑使用3条select语句并合并结果表,删除重复项。

ZJXianG
4楼-- · 2020-09-18 23:20

这是BW例程-几乎没有可能将具有DATA_PACKAGE的FAE更改为联接。

当学会了学习
5楼-- · 2020-09-18 23:18

最好的解决方案是尝试对所有条目使用联接而不是所有联接。

Select语句只能使用一个表索引。 它不会使用所有三个的组合。 因此,我可以看到缓慢的速度。 尝试执行3条select语句而不是1条可能更好。 一个使用卖给,然后一个使用运送到,然后一个使用zfield1。 我知道多次访问数据库通常不是最好的选择,但在这种情况下可能是最好的选择。 您可能会得到一些重复的记录,但是您可以删除它们。

此外,别忘了先检查以确保内部表不为空,否则您将从表中获取所有记录。

小熊yu生菜
6楼-- · 2020-09-18 23:37

还没有尝试过,但是join(代替FOR ALL ENTRIES)和UNION(代替OR)的组合可能会使用所有三个索引。

一周热门 更多>