HANA里也是有统计信息的,并且是自动收集的。HANA查询计划生成也是基于CBO的。 由于HANA是基于内存的数据库,因此许多统计信息是在数据加注到内存后计算的,有的统计信息是加注过程中通过采样获得的。这些统计信息不像其他传统数据库那样需要很多人为干预,内存计算的主要特点是...
显示全部HANA里也是有统计信息的,并且是自动收集的。HANA查询计划生成也是基于CBO的。 由于HANA是基于内存的数据库,因此许多统计信息是在数据加注到内存后计算的,有的统计信息是加注过程中通过采样获得的。这些统计信息不像其他传统数据库那样需要很多人为干预,内存计算的主要特点是列式存储+多核并行计算,因此查询计划优化的工作量要小很多,也不需要复杂索引就能达到很快的速度。因此统计信息的概念也相对弱化一点。
HANA的统计信息主要有以下一些:
1. 列表:
表大小:从运行时的内存信息获得,可以从M_CS_TABLES视图中获得。
每列的不同取值数量:从每列的字典中获得,存储在M_CS_COLUMNS视图中的DISTINCT_COUNT列中,或者从唯一性约束,比如主键获得。
过滤选择性信息: 主要是估计值,一般通过采样获得, 可以得到每列不同取值的分布, 取值越分散, 选择能力越强。
键值连接选择性信息: 主要提供键值连接时的过滤能力信息, 通过采样获得.取值越分散, 选择能力越强。
每列频率最高的取值:从字典里获得。
2. 行表:
表大小:通过数据页的数量进行估计。
每列的不同取值数量:通过对表和索引记录采样获得,或者从唯一或主键约束中获得。
过滤选择性信息: 主要是估计值,一般通过采样获得, 可以得到每列不同取值的分布, 取值越分散, 选择能力越强。
3. 内部表(中间结果):
表大小:表大小直接可从内存获得。
每列的不同取值数量:从每列的字典中获得
过滤选择性信息: 主要是估计值,一般通过采样获得, 可以得到每列不同取值的分布, 取值越分散, 选择能力越强。
收起