暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

8.2.3 优化器从基线中选择执行计划

原创 由迪 2021-02-24
551

当语句存在已激活且被接受的基线执行计划时,优化器在对 SQL 语句进行编译时,会将当前解析出的执行计划与基线当中的执行计划进行比较,采用代价最低的执行计划。过程如下:

• 优化器采用基于代价的原则,解析语句的执行计划,并选择代价最小的执行计划;
o 如果语句不存在基线执行计划,则使用当前找到的代价最小执行计划(执行计划选择 结束);
o 如果语句存在基线执行计划,则对基线当中的固定(Fixed)执行计划进行匹配;
 如果与基线当中某条固定执行计划匹配,则使用当前找到的代价最小执行计划
(执行计划选择结束);
 如果基线中没有固定执行计划或未匹配到固定执行计划,则对基线中已接受的执 行计划进行匹配;

 如果与基线当中已接受执行计划匹配,则使用当前找到的代价最小执行计 划(执行计划选择结束);
 如果没有匹配到已接受执行计划,则通过 SQL 分析器(SQL Analyzer)对基线中已接受执行计划进行代价评估,并采用代价最小的接受执执行计划; 如果基线中不存在固定执行计划,则将当前解析出的执行计划则存储为历史执行计划(执行计划选择结束)。

注意,要使优化器在编译 SQL 时选择基线执行计划,必须确保参
optimizer_use_sql_plan_baselines 值为 TRUE(即默认值)。

以下例子演示了语句存在基线执行计划时,优化器未找到与当前解析出的执行计划匹配的基线执行计划的情况
image.png
image.png
image.png

最后修改时间:2021-02-25 14:20:46
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论