点击此处---> 群内免费提供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)
嗨,
首先,考虑where子句的主键,并避免使用(*)字段。
如果实际的检索在where子句中没有主键,则尝试确定使用具有主键的表执行Join查询的可能性。
请考虑使用跟踪SQL工具(ST05)来识别任何已解决的问题。 示例:跟踪与ABAP%_HINTS一起使用的最佳二级索引。
此致
Cleo
也许您应该共享Ztable和Index详细信息的结构(最好与屏幕截图一起使用)和DATA_PACKAGE的结构以获取更多适当的答复。
K.Kiran。
AFAIK大多数数据库不会使用您的3个索引来获取数据,而只会使用一个索引。
因此,您应该考虑使用3条select语句并合并结果表,删除重复项。
这是BW例程-几乎没有可能将具有DATA_PACKAGE的FAE更改为联接。
最好的解决方案是尝试对所有条目使用联接而不是所有联接。
Select语句只能使用一个表索引。 它不会使用所有三个的组合。 因此,我可以看到缓慢的速度。 尝试执行3条select语句而不是1条可能更好。 一个使用卖给,然后一个使用运送到,然后一个使用zfield1。 我知道多次访问数据库通常不是最好的选择,但在这种情况下可能是最好的选择。 您可能会得到一些重复的记录,但是您可以删除它们。
此外,别忘了先检查以确保内部表不为空,否则您将从表中获取所有记录。
还没有尝试过,但是join(代替FOR ALL ENTRIES)和UNION(代替OR)的组合可能会使用所有三个索引。
一周热门 更多>