"选择单个"与"选择最多1个行"

2020-08-18 21:25发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)大家好, 我花了最后2个小时...

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

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


大家好,

我花了最后2个小时比较并研究了上述陈述,但没有明确的结果。

是否有任何官方文档,其中哪个语句应更快地处理SELECT,而由于仅访问非(唯一)索引字段,我希望该语句仅返回一条记录?

这是否还取决于所使用的DBMS(ORACLE 10.2.0.4.0)和/或SAP版本(NW 7.01 SP6)?

从性能专家那里获得一些反馈非常好!

在此先感谢和问候,

Alej

17条回答
d56caomao
2020-08-18 22:08

Alejiandro Sensejl,

我花了最后2个小时比较并研究了上述陈述,但没有明确的结果。

也许您最好花一些时间来获取和分析数据库计划以进行具体的查询? 然后,您可以决定在这种情况下哪种方法更好。

例如,在与您相同的Oracle系统和NW版本中,我编写了代码:

数据:ls_ekpo TYPE ekpo。

 单选*
   从ekpo
   旁路缓冲
   INTO ls_ekpo
   ebeln ='XXXXXXXXXX'。

 选择 *
   从ekpo
   最多1行
   旁路缓冲
   INTO ls_ekpo
   ebeln ='XXXXXXXXXX'。
 ENDSELECT。

然后使用ST05。

计划相同,SAP将提示FIRST_ROWS传递给Oracle,并使用rownum <= 1:

 SQL语句
 选择
/* +
   FIRST_ROWS(1)
 */
   *
 从
   " EKPO"
 哪里
   " MANDT" =:A0 AND" EBELN" =:A1 AND ROWNUM <=:A2
 执行计划
  选择语句(估计成本= 5,估计#行= 2)
   |
   -3个STOP键
       | 筛选谓词:ROWNUM <= TO_NUMBER(:A2)
       |
       -2通过索引行EKPO进行的表访问
           |  (估算费用= 5,估算#行= 2)
           | 估计。  CPU成本= 46.827估计值。  IO成本= 5
           |
           ------ 1 INDEX RANGE SCAN EKPO〜0
                   (估算费用= 4,估算#行= 18)
                   搜索列:2
                   估计。  CPU成本= 28.886估计值。  IO成本= 4
                   访问谓词:" MANDT" =:A0和" EBELN" =:A1 

一周热门 更多>