#优化器
优化器是SQL引擎的核心,在了解SQL调优之前,应该对优化器进行了解。
优化器的目的是尝试为SQL生成最佳执行计划,YashanDB默认的优化器为CBO,其核心规则为在所有可能的备选执行路径中选择成本最低的计划。
SQL是一种非过程式语言,因此优化器可以自由的以任何顺序进行合并、重组和处理SQL语句,并通过检查多种访问方法(例如全表扫描或索引扫描)、不同的联接方法(例如嵌套循环或哈希联接)、不同的联接顺序以及可能的转换来确定SQL语句的最佳计划。
对于给定的SQL查询和硬件环境,优化器为每个可能的计划步骤分配一个相对数值的成本,然后将这些值一起分解以生成该计划的总体成本估算,随后优化器从中选择成本估算最低的计划(即最优的执行计划)。成本的计算基于统计信息和关联条件,同时,在特定环境中,成本计算同时会考量CPU、IO和网络通讯。
统计信息对于CBO是否能做出正确的选择至关重要,因此,当优化器发现统计信息不合理/不完整/不可用时,将会触发动态的统计信息收集,覆盖旧的统计信息。而在某些特殊情况下,用户通过性能诊断发现优化器未进行统计信息更新,可以进行统计信息的手工收集。
作为影响性能的关键组件,优化器永远致力于生成最优的执行计划,但在各项因素(例如元数据变化、数据量变化等)交织的复杂环境中,优化器的判断可能出现偏差。当发现数据库环境正常,而优化器生成的执行计划并不是最优和想要的计划时,就可能需要人工介入进行调优。