abap - 集群表的内存效率最高:“select count(*)”或“select .. endselect”?
问题描述
我想知道哪种语句(见下文)对于确定Cluster Table的大小更有效。或者至少确定表大小是否达到某个阈值{n}。效率意味着使用更少的 PSAPTEMP 表空间。
集群表的问题在于,为了获得表的条目,需要在集群的多个表中查找一个条目的字段,这些表分散在这些表中。因此,需要查看的不仅仅是计数表。因此,对于每个条目,需要查找多个条目。这使得读取效率低下,并且由于 COUNT 使用可能溢出的 INT 数据类型,因此可能会使其转储。
SELECT COUNT(*)
...
UP TO {n} rows.
SELECT *
...
UP TO {n} ROWS.
ENDSELECT. `and then determine the size of the result. `
在我看来,它们似乎是等效的,但在使用阈值时它们可能不是。也许限制会有所不同,具体取决于数据的读取方式。编辑:当然, SELECT .. ENDSELECT 是一个循环,因此主要效率较低。
但我想知道它实际上是如何工作的,并更好地理解其中的区别。到目前为止,我似乎必须尝试一下。我假设数据库会有所不同,但通常是 Oracle。
解决方案
我们无法真正创建我们需要的测试环境。所以没有最终答案。但是一些学习:
- 从集群表中读取数据应该基于完整的主键序列(应该通过主键访问 - 检索非常快,否则非常慢)
- 没有二级索引
- 选择 * 是好的,因为无论如何都会检索所有列。对多行执行操作比单行操作更有效。-> 因此,您仍然想选择一个内部表。
- 如果在内部表中选择了许多行,您可能仍希望检索特定列以减少所需的内存。
- 有一种方法可以将集群转换为透明但有停机时间,这对我们来说没有办法
- 不支持聚合 SQL 函数(SUM、AVG、MIN、MAX 等)
推荐阅读
- amazon-web-services - 我想知道如何使用 aws cli 检查 DatabaseConnections。?
- javascript - 在 JavaScript 中调用类内部的方法
- javascript - 检查数字是否为回文的Javascript函数
- sql - 如何计算重复值的小时数
- javascript - Deviceorientaion 事件在 Android 上的 Chrome 上不起作用
- r - 将 R 函数形式从代码作为字符串应用/映射到新函数体中
- git - git push origin master 缺少或无效的凭据
- ruby - 查找所有子目录和长路径
- c++ - 为什么这个“while(cin.get(str,3))”只运行一次,无论你输入什么?
- sql - 专用排序列的命名约定