概述
本文旨在分析Kingbase中基于代价的查询优化的基本概念与代价模型,为自己以后工作提供一个笔记。同时该文章也适用于学习和开发PostgreSQL的同学
逻辑优化和物理优化
数据库优化器基本上都支持逻辑优化和物理优化。逻辑优化的核心是代数的等价转换。基于代价的查询优化技术是物理优化的一个重要部分。合理的代数等价转换和代价估算是数据库优化器的一项重要功能。
CBO概念:
基于代价的查询优化技术(Cose-Based Optimizaton,CBO),基于对数据库中的大量数据进行统计(抽样统计)得到的统计信息,考虑系统的各种参数(缓冲区大小,数据分布,存取路径等),优化器可以类似于准确的估计出各种查询计划所需要的资源消耗和时间开销,从而选择出一条最合适的执行计划。
统计信息概述
统计信息是基于代价的查询优化技术的基础,也是计算查询代价的原始材料,代价估算的过程非常依赖数据库的统计信息,统计信息的准确度直接影响到了查询优化的准确性。Kingbase为了支持基于代价的优化(CBO)提供了统计信息功能,主要信息包含包括两个方面:
1. 表统计信息
优化器在计算表的扫描成本时,需要知道表的基本数据,例如元组的总数,占据磁盘块的页面数等信息。这些信息主要保存在sys_class系统表中,主要包含两个主要的字段:reltuples
和relpages
。
reltuples :表示该表或者索引在磁盘中的元组数。
relpages:表或者索引占用的磁盘块数。
2. 列统计信息
列统计信息是指对表中的每一列的统计信息,主要存储在sys_statistic系统表中,它负责从多个角度描述该列的数据概况信息。
- 主要是NULL值率、列的平均宽度、唯一值的个数或比例。见 sys_statistic 系统表中的
s