性能:检查表上是否存在记录的最佳方法是什么?

2020-08-13 16:05发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)你好, 通常可以使用: 从x =...

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

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


你好,

通常可以使用:

从x = y的选项卡中选择单个*。

但是,关于性能,我认为 其他一些更好的命令...

任何想法吗?

tks。

15条回答
打个大熊猫
2020-08-13 16:52

注意,测量结果取决于缓冲和索引。 特别是,像其他聚合SELECT一样,SELECT COUNT(*)会绕过可能不希望的缓冲区! 除此之外,正如Hermann Gahm已经指出的那样,我们的客户使用的数据库之间似乎存在显着差异。

我最喜欢的模式是SELECT SINGLE [...]。

为了"验证"这是否真的是一个好选择,我比较了三种不同情况下的几种策略:

a)大型无缓冲表,其中子句仅指定键的一部分

b)大表,具有单记录缓冲,并且在哪里指定完整键

c)相同的大表,具有单记录缓冲,而子句仅指定键的一部分

我的测量在HANA和MaxDB的7.40系统中运行。 独立于数据库,结果之间的定量关系相似,证实了我的最爱是一个不错的选择。 特别要注意的是,在第二个示例中,SELECT COUNT看起来有多糟糕,否则表缓冲可以节省大量时间!

>>>完全无缓冲表<<<的存在检查

SELECT * FROM sbook INTO sbook_line
WHERE carrid ='LH'。
EXIT。
ENDSELECT。
执行500次的持续时间(秒):43,8334260

从最多1个行中选择COUNT(*)
其中carrid ='LH'。
500次执行的持续时间(秒):0,7393800

SELECT * FROM sbook INTO sbook_line
最多1个行
其中carrid ='LH'。
ENDSELECT。
500次执行的持续时间(以秒为单位):0,7619870

SELECT carrid从Sbook进入carrid
最多1个行
其中carrid ='LH'。
ENDSELECT。
500次执行的持续时间(以秒为单位):0,5869470

从sbook到carrid中选择单个carrid
WHERE carrid ='LH'。
500次执行的持续时间(秒):0,6001700


>>>具有完整键<<<的单缓冲表的存在性检查

SELECT * FROM tadir INTO tadir_line
哪里pgmid ='R3TR'
AND object ='PROG'
AND obj_name = sy-cprog。
退出。
ENDSELECT。
500次执行的持续时间(以秒为单位):0,0103200

从tadir到1行选择COUNT(*)

pgmid ='R3TR'
AND object ='PROG'
AND obj_name = sy-cprog。

500次执行的持续时间(以秒为单位):0,6242380

SELECT *从tadir到tadir_line
最多1个行
pgmid ='R3TR'
AND object ='PROG'
AND obj_name = sy-cprog。
ENDSELECT。< br> 500次执行的持续时间(以秒为单位):0,0103680

从tadir到pgmid的SELECT pgmid
最多到1行
pgmid ='R3TR'
AND object ='PROG'
AND obj_name = sy-cprog。
ENDSELECT。< br> 500次执行的持续时间(以秒为单位):0,0103690

从tadir到pgmid中选择单个pgmid
哪里pgmid ='R3TR'
AND object ='PROG'
AND obj_name = sy-cprog。
500次执行的持续时间以秒为单位:0, 0097770


>>>具有不完整键<<<

的单缓冲表的存在性检查

SELECT * FROM tadir INTO tadir_line
哪里pgmid ='R3TR'
AND object ='PROG'。
退出。
ENDSELECT。
持续500秒的持续时间:25, 2490160

从tadir到1行之间选择COUNT(*)
哪里pgmid ='R3TR'
AND object ='PROG'。
500次执行的持续时间(以秒为单位):1,4555210

SELECT *从tadir到tadir_line
最多1个行
pgmid ='R3TR'
AND object ='PROG'。
ENDSELECT。
持续500秒的持续时间: 1,6207910

SELECT pgmid从tadir到pgmid
最多到1行
pgmid ='R3TR'
AND object ='PROG'。
ENDSELECT。
持续500秒的持续时间: 1,5180330

从tadir到pgmid中选择单个pgmid
哪里pgmid ='R3TR'
AND object ='PROG'。
500次执行的持续时间(以秒为单位):1,2033210

一周热门 更多>