查询优化器
查询优化器通过分析可用的执行方式和查询所涉及的对象统计信息来生成最优的执行计划。 访问路径指从数据库中检索数据的方法。查询优化器选择访问路径基于以下几个因素: 1. 执行语句中可能的访问路径;2. 估算每条执行路径的代价。为了选择一个访问路径,优化器首先会通过检查语句中的 FROM 子句和 WHERE 子句中的条件表达式来决定哪一个访问路径可以使用。优化器会根据可用的访问路径生成可能的执行计划集合,然后使用索引、列和表的统计信息来估算每个计划的代价。最后,优化器选择最小代价的那个执行计划。影响优化器选择访问路径的因素有语句中的提示(HINT)和统计信息。用户可以在执行的语句中使用 HINT 来指定访问路径。而统计信息会根据表中数据的分布情况决定采用哪个访问路径会产生最小的代价。
连接
查询语句中 FROM 子句包含多个表时,我们称为连接查询。生成连接查询的执行计划,需要考虑三方面因素:访问路径,连接方式,连接顺序。
统计信息
对象统计信息描述数据是如何在数据库中存储的。统计信息是优化器的代价计算的依据,可以帮助优化器较精确地估算成本,对执行计划的选择起着至关重要的作用。达梦数据库的统计信息分三种类型:表统计信息、列统计信息、索引统计信息。通过直方图来表示。
在执行查询时,如果数据对象存在统计信息,代价算法可以根据统计信息中的数据,比较精确地计算出操作所需花费的成本,以此来确定连接方式、对象访问路径、连接顺序,选择最优的执行计划。用户也可以通过修改 OPTIMIZER_DYNAMIC_SAMPLING 参数值在缺乏统计信息时进行动态统计信息收集。
索引
索引是与表相关的可选的结构(聚簇索引除外),它能使对应于表的 SQL 语句执行得更快