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
复制
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
上面两个执行计划。可以看到不同的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年前

评论
这个文章
MySQL 优化器提示(三)之 Optimizer Hints for Variable-Setting Hint Syntax
看不了
1年前

1
您好,您的文章已入选“墨力计划”合格奖,10墨值奖励已经到账请查收!
❤️我们还会实时派发您的流量收益。
3年前

评论
相关阅读
【MySQL 30周年庆】MySQL 8.0 OCP考试限时免费!教你免费领考券
墨天轮小教习
3136次阅读
2025-04-25 18:53:11
MySQL 30 周年庆!MySQL 8.4 认证免费考!这次是认真的。。。
严少安
876次阅读
2025-04-25 15:30:58
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
520次阅读
2025-04-17 17:02:24
MySQL 9.3 正式 GA,我却大失所望,新特性亮点与隐忧并存?
JiekeXu
448次阅读
2025-04-15 23:49:58
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
381次阅读
2025-04-15 14:48:05
MySQL 8.0 OCP 1Z0-908 考试解析指南(二)
JiekeXu
326次阅读
2025-04-30 17:37:37
记录MySQL数据库的一些奇怪的迁移需求!
陈举超
294次阅读
2025-04-15 15:27:53
SQL优化 - explain查看SQL执行计划(下)
金同学
289次阅读
2025-05-06 14:40:00
MySQL 8.0 OCP 1Z0-908 考试题解析指南
青年数据库学习互助会
279次阅读
2025-04-30 12:17:54
MySQL 30 周年庆!MySQL 8.4 认证免费考!这次是认真的。。。
数据库运维之道
277次阅读
2025-04-28 11:01:25