HanaDB - 复杂性:SELECT COUNT( * ) FROM dbtab

问题描述

这个问题与MySQL - Complexity of: SELECT COUNT(*) FROM MyTable;相同。

不同之处在于MysqL我想知道HDB的答案。

我用谷歌搜索,并在 SAP 知识库中查找,但没有找到答案。

澄清:问题是关于在没有任何附加条件的情况下选择计数:

SELECT COUNT( * ) FROM dbtab.

上述查询的复杂度是多少。 HDB 是否在每张桌子的顶部存储一个计数器?

解决方法

HANA 支持多种表类型,例如此处会想到 ROW-、COLUMN-、VIRTUAL-、EXTENDED- 和 MULTISTORE-表。

对于其中一些,当前的原始记录计数作为内部存储结构的一部分保留,不需要在查询时计算。 对于 ROW 和 COLUMN 表尤其如此。

VIRTUAL 表在另一端,当涉及到 SELECT count(*) 时,其行为更像复杂视图。根据虚拟表“后面”的数据库,其性能可能会大不相同

此外,请小心假设 ROW 和 COLUMN 存储表将几乎不费力返回信息。 HANA 是一个无共享的分布式数据库(在横向扩展设置中),这意味着此类信息只有表所在的节点知道。找出例如的行数在 Y 个节点上具有 X 个分区的分区表可能需要相当长的时间!

最后,这个原始记录计数仅适用于当前在内存中的表。在当前卸载的表上运行 SELECT count(*) 将触发响应该查询所需的列的加载(基本上所有主键列 + 一些内部表管理结构)。

在理想情况下(一个列表,加载到内存和单个节点上的所有分区)这个查询应该立即返回;但其他提到的场景也需要考虑。

希望能回答这个相当广泛的问题。