CDS视图-参数与位置

2020-09-14 07:13发布

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

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


大家好,

我仍在学习构建可靠的CDS视图。 在开发过程中,我比较参数与WHERE语句时对CDS视图的性能感到好奇。

我已经构建了CDS视图:

 @ AbapCatalog.sqlViewName:'XXX'
 @ AbapCatalog.compiler.compareFilter:是
 @ AccessControl.authorizationCheck:#NOT_REQUIRED
 @ EndUserText.label:'模块数据'
 @ClientDependent:是
 定义视图XXX

 使用参数p_idate:abap.dats,
                 p_lang:abap.lang,
                 p_objid:abap.numc(8)
  
 -主要对象
   选择与hrp1000不同的对象
  
 -模块学分
   左外部加入hrp1741作为module_credits
     在object.plvar = module_credits.plvar
       和object.otjid = module_credits.otjid
                                
 -模块容量
   左外部加入hrp1024作为容量
     在object.plvar = Capacity.plvar
       和object.otjid = Capacity.otjid
                                
 -模块数据
   左外部连接hrp1746作为module_data
     在object.plvar = module_data.plvar
       和object.otjid = module_data.otjid

 {

     键object.objid作为ID,
     object.mc_short作为ShortName,
     object.stext作为名称,
     object.begda作为BeginDate,
     object.endda作为EndDate,
    
     module_credits.cpmin作为MinCredits,
     module_credits.cpmax作为MaxCredits,
     module_credits.cpopt作为OptimumCredits,
    
     Capacity.kapz1为MinCapacity,
     Capacity.kapz2为OptimumCapacity,
     Capacity.kapz3作为MaxCapacity,
    
     module_data.severity为AcademicLevel,
     module_data.category作为类别,
     module_data.modrepeattype作为RepetitionType,
     module_data.waitl_level作为WaitingListLevel,
     module_data.waitl_number作为WaitlistInPercent,
     module_data.waitl_disabled为WaitListIsDisabled,
     module_data.mult_sec_enabled为MltplSctnIsEnabled,

 }
 其中object.plvar ='01'
   和object.otype ='SM'
   和object.objid = $ parameters.p_objid
   和object.begda <= $ parameters.p_idate
   和object.endda> = $ parameters.p_idate
   和object.langu = $ parameters.p_lang
   和module_credits.begda <= $ parameters.p_idate
   和module_credits.endda> = $ parameters.p_idate
   和Capacity.begda <= $ parameters.p_idate
   和Capacity.endda> = $ parameters.p_idate
   和module_data.begda <= $ parameters.p_idate
   和module_data.endda> = $ parameters.p_idate

 

此视图的性能很好。 但是我不想使用Objectid(OBJID)作为参数。 我只希望能够选择每个特定选择中需要的所有对象。

使用OBJID作为参数时的性能:〜120.000微秒。

在WHERE子句中使用OBJID时的性能:〜800.000微秒。

为什么在WHERE子句中使用OBJID而不是OBJID作为参数时,性能却慢得多?

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

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


大家好,

我仍在学习构建可靠的CDS视图。 在开发过程中,我比较参数与WHERE语句时对CDS视图的性能感到好奇。

我已经构建了CDS视图:

 @ AbapCatalog.sqlViewName:'XXX'
 @ AbapCatalog.compiler.compareFilter:是
 @ AccessControl.authorizationCheck:#NOT_REQUIRED
 @ EndUserText.label:'模块数据'
 @ClientDependent:是
 定义视图XXX

 使用参数p_idate:abap.dats,
                 p_lang:abap.lang,
                 p_objid:abap.numc(8)
  
 -主要对象
   选择与hrp1000不同的对象
  
 -模块学分
   左外部加入hrp1741作为module_credits
     在object.plvar = module_credits.plvar
       和object.otjid = module_credits.otjid
                                
 -模块容量
   左外部加入hrp1024作为容量
     在object.plvar = Capacity.plvar
       和object.otjid = Capacity.otjid
                                
 -模块数据
   左外部连接hrp1746作为module_data
     在object.plvar = module_data.plvar
       和object.otjid = module_data.otjid

 {

     键object.objid作为ID,
     object.mc_short作为ShortName,
     object.stext作为名称,
     object.begda作为BeginDate,
     object.endda作为EndDate,
    
     module_credits.cpmin作为MinCredits,
     module_credits.cpmax作为MaxCredits,
     module_credits.cpopt作为OptimumCredits,
    
     Capacity.kapz1为MinCapacity,
     Capacity.kapz2为OptimumCapacity,
     Capacity.kapz3作为MaxCapacity,
    
     module_data.severity为AcademicLevel,
     module_data.category作为类别,
     module_data.modrepeattype作为RepetitionType,
     module_data.waitl_level作为WaitingListLevel,
     module_data.waitl_number作为WaitlistInPercent,
     module_data.waitl_disabled为WaitListIsDisabled,
     module_data.mult_sec_enabled为MltplSctnIsEnabled,

 }
 其中object.plvar ='01'
   和object.otype ='SM'
   和object.objid = $ parameters.p_objid
   和object.begda <= $ parameters.p_idate
   和object.endda> = $ parameters.p_idate
   和object.langu = $ parameters.p_lang
   和module_credits.begda <= $ parameters.p_idate
   和module_credits.endda> = $ parameters.p_idate
   和Capacity.begda <= $ parameters.p_idate
   和Capacity.endda> = $ parameters.p_idate
   和module_data.begda <= $ parameters.p_idate
   和module_data.endda> = $ parameters.p_idate

 

此视图的性能很好。 但是我不想使用Objectid(OBJID)作为参数。 我只希望能够选择每个特定选择中需要的所有对象。

使用OBJID作为参数时的性能:〜120.000微秒。

在WHERE子句中使用OBJID时的性能:〜800.000微秒。

为什么在WHERE子句中使用OBJID而不是OBJID作为参数时,性能却慢得多?

付费偷看设置
发送
2条回答
绿领巾童鞋
1楼 · 2020-09-14 07:36.采纳回答

对不起,我很困惑。

是什么意思

" OBJID作为参数"与" WHERE子句中的OBJID"?

您是否谈论开放SQL语句访问视图,一次是将对象id作为参数传递,一次是在其WHERE子句中传递?

如果是,请在ABAP调试器或ST05中使用SQL跟踪,以查看由DBI生成的不同SQL语句。 那应该给你一个提示,为什么表现会有所不同。

大简至美
2楼-- · 2020-09-14 07:51

"您是指SQL视图吗?"

是的。 但这取决于平台,如何实例化带有参数的CDS视图。 可能是不直接支持带参数视图的平台的视图或函数。

一周热门 更多>