2020-08-18 21:25发布
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
大家好,
我花了最后2个小时比较并研究了上述陈述,但没有明确的结果。
是否有任何官方文档,其中哪个语句应更快地处理SELECT,而由于仅访问非(唯一)索引字段,我希望该语句仅返回一条记录?
这是否还取决于所使用的DBMS(ORACLE 10.2.0.4.0)和/或SAP版本(NW 7.01 SP6)?
从性能专家那里获得一些反馈非常好!
在此先感谢和问候,
Alej
请在讨论再次开始之前锁定该线程
> SELECT SINGLE:select single是基于PRIMARY KEY的,它将直接获取第一条记录,而无需搜索所有记录。
第一条记录是什么
> SELECT UPTO 1 ROW:它将检查给定条件的所有记录并获取第一条记录。
经常重复胡说八道!
它们完全相同完全相同!!! 因为同一条语句进入数据库,所以它们在ABAP(或Open SQL)中是不同的!!
足够了。
Rob
当我拥有完整的主键时,我会使用SELECT SINGLE。
当我没有完整的主键时,我会使用UP TO 1 ROWS。
原因是代码的可读性而不是性能!
这两个语句的性能是99.9%相同,因此没有与这些语句相关的性能问题。
如果您不了解, 一切都应该清楚,一个SELECT SINGLE必须始终是快速的。
但是,多达1个行可能很快,但也可能非常慢:
没有索引支持,只有很少的记录可以满足WHERE子句的要求,因此必须扫描整个表。
但是,此问题与语句无关,而仅与以下事实有关:没有索引支持WHERE。 如果经常完成
,则需要一个索引。
Siegfried
说得很好,Sandra。 如果有人有疑问,请检查以下内容:
表:t100。
从t100中选择单个*,其中text ='不存在'。
从* 100中选择* t100最多1行,其中text ="不存在"。 结束选择。
例如 在ORACLE上:2次全表扫描(不支持索引)
reg。 差异经常会出现问题,而是选择单行/最多1行...
我通常会指出单记录缓冲区支持
用于选择单行,但除此之外没有任何作用 比较或差异,因为我认为
不是很有帮助。
与"直接读取"和"顺序读取"相同...我经常被问到有什么区别....感叹
...有趣 你不懂的...
好 Harald是对的,我没有将唯一的secondayr索引添加到SELECT SINGLE中,以使其简单并仅使用上面编写的建议。 据我所知,没有那么多独特的二级索引。
第二点完全被误解了。
>您在这里表示的是当您在WHERE中不使用正确的键时的问题,该键与2条语句中的
>无关。
存在检查(最多不使用COUNT(*))是UP TO 1 ROWS的一种非常普遍的用法, 可能不值得建立索引。 可能是没有行满足条件,那么UP TO 1 ROWS需要对整个表进行全表扫描。
尊敬的朋友,
差异选择单:
1。 一次总是只检索一条记录
2。 在这里,我们必须在where条件中传递整个主键组合
3。 用于检索特定记录。
选择上一行:
1。它始终仅读取一条记录
2。在这里,我们始终在匹配条件记录中从第一个记录中选择第一条记录来传递键组合的一部分。
3。 这用于验证
此致
K.S。Kannan
最多设置5个标签!
请在讨论再次开始之前锁定该线程
> SELECT SINGLE:select single是基于PRIMARY KEY的,它将直接获取第一条记录,而无需搜索所有记录。
第一条记录是什么
> SELECT UPTO 1 ROW:它将检查给定条件的所有记录并获取第一条记录。
经常重复胡说八道!
它们完全相同完全相同!!! 因为同一条语句进入数据库,所以它们在ABAP(或Open SQL)中是不同的!!
足够了。
Rob
当我拥有完整的主键时,我会使用SELECT SINGLE。
当我没有完整的主键时,我会使用UP TO 1 ROWS。
原因是代码的可读性而不是性能!
这两个语句的性能是99.9%相同,因此没有与这些语句相关的性能问题。
如果您不了解, 一切都应该清楚,一个SELECT SINGLE必须始终是快速的。
但是,多达1个行可能很快,但也可能非常慢:
没有索引支持,只有很少的记录可以满足WHERE子句的要求,因此必须扫描整个表。
但是,此问题与语句无关,而仅与以下事实有关:没有索引支持WHERE。 如果经常完成
,则需要一个索引。
Siegfried
说得很好,Sandra。 如果有人有疑问,请检查以下内容:
表:t100。
从t100中选择单个*,其中text ='不存在'。
从* 100中选择* t100最多1行,其中text ="不存在"。 结束选择。
例如 在ORACLE上:2次全表扫描(不支持索引)
reg。 差异经常会出现问题,而是选择单行/最多1行...
我通常会指出单记录缓冲区支持
用于选择单行,但除此之外没有任何作用 比较或差异,因为我认为
不是很有帮助。
与"直接读取"和"顺序读取"相同...我经常被问到有什么区别....感叹
...有趣 你不懂的...
好 Harald是对的,我没有将唯一的secondayr索引添加到SELECT SINGLE中,以使其简单并仅使用上面编写的建议。 据我所知,没有那么多独特的二级索引。
第二点完全被误解了。
>您在这里表示的是当您在WHERE中不使用正确的键时的问题,该键与2条语句中的
>无关。
< p>如果我遵循上述规则,则不是语句,而是用例不同!存在检查(最多不使用COUNT(*))是UP TO 1 ROWS的一种非常普遍的用法, 可能不值得建立索引。 可能是没有行满足条件,那么UP TO 1 ROWS需要对整个表进行全表扫描。
尊敬的朋友,
差异选择单:
1。 一次总是只检索一条记录
2。 在这里,我们必须在where条件中传递整个主键组合
3。 用于检索特定记录。
选择上一行:
1。它始终仅读取一条记录
2。在这里,我们始终在匹配条件记录中从第一个记录中选择第一条记录来传递键组合的一部分。
3。 这用于验证
此致
K.S。Kannan
一周热门 更多>