暂无图片
暂无图片
5
暂无图片
暂无图片
4
暂无图片

MySQL 优化器提示(二)之 Optimizer Hints for Naming Query Blocks

原创 aisql 2022-03-06
2674

MySQLOptimizer Hints 的适用范围为以下几种Query block, table,Index,Global
其它三种都是我们常见的类型,就第一个Query block 需要专门定义。

一、定义

QB_NAME(name)
定义很简单 以代码举列

select /*+ qb_name(qb1) */ * from services b inner join user a on b.userid = a.id where a.tel like '136%' order by b.CreatedTime desc limit 10
复制

如上面所示,就定义了 一个qb1的Query block 这个Query block 所管辖的表就是 from 后的 b,a两表

当遇到嵌套的时候。可以这样

explain select /*+ qb_name(qb1) */ * from order_bill_index a inner join order_bill_detail b on a.id =b.order_id where goods_id in ( select /*+ qb_name(qb2) */ c.id from goods_goods_info c inner join goods_class d on c.class_id = d.id )
复制

qb1 管辖是a和b表, qb2管辖的是 c和d表

二、使用

Query Blocks 有三种使用情况。分别是

hint_name([@query_block_name]) hint_name([@query_block_name] tbl_name [, tbl_name] ...) hint_name(tbl_name[@query_block_name] [, tbl_name[@query_block_name]] ...)
复制

a、第一种 hint_name([@query_block_name])

JOIN_FIXED_ORDER 就是这个用法
是指。hint是适用于哪个Query block

explain select /*+ qb_name(qb1) JOIN_FIXED_ORDER(@qb1) */ * from services b inner join user a on b.userid = a.id where a.tel like '136%' order by b.CreatedTime desc limit 10
复制

b、第二种 hint_name([@query_block_name] tbl_name [, tbl_name] …)

指定query_block块内的表的顺序。 如下面的join_order

explain select /*+ qb_name(qb1) JOIN_ORDER(@qb1 a,b) */ * from services b inner join user a on b.userid = a.id where a.tel like '136%' order by b.CreatedTime desc limit 10
复制

image.png

c、第三种 hint_name(tbl_name[@query_block_name] [, tbl_name[@query_block_name]] …)

指定表名@query_block_name

explain select /*+ qb_name(qb1) JOIN_ORDER(a@qb1,b@qb1,a@qb2,b@qb2) */ * from order_bill_index a inner join order_bill_detail b on a.id =b.order_id where goods_id in ( select /*+ qb_name(qb2) */ a.id from goods_goods_info a inner join goods_class b on a.class_id = b.id )
复制

如上面语句一样。由于我子查询表的别名得取得和外面一样了。所以就必须在表名后指定是哪个query_block

image.png

image.png
上面两个执行计划。可以看到不同的Query block 也可以指定join顺序。

MySQL优化器提示系列文章

MySQL 优化器提示(一)之 Join-Order Optimizer Hints
MySQL 优化器提示(二)之 Optimizer Hints for Naming Query Blocks
MySQL 优化器提示(三)之 Optimizer Hints for Variable-Setting Hint Syntax

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

评论

筱悦星辰
暂无图片
1年前
评论
暂无图片 0
生活的最佳状态,是冷冷清清的风风火火。
1年前
暂无图片 点赞
评论
Switchblade
暂无图片
1年前
评论
暂无图片 0
这个文章 MySQL 优化器提示(三)之 Optimizer Hints for Variable-Setting Hint Syntax 看不了
1年前
暂无图片 点赞
1
chengang
暂无图片
1年前
回复
暂无图片 0
谢谢反馈。已修复链接
1年前
暂无图片 点赞
回复
墨天轮福利君
暂无图片
3年前
评论
暂无图片 0
您好,您的文章已入选“墨力计划”合格奖,10墨值奖励已经到账请查收! ❤️我们还会实时派发您的流量收益。
3年前
暂无图片 点赞
评论