8.8.1 通过 EXPLAIN 来优化查询

8.8.1 通过 EXPLAIN 来优化查询

EXPLAIN 语句会提供 MySQL 如何执行查询的信息:

  • EXPLAIN 可以对 SELECT,DELETE,INSERT,和 UPDATE 语句进行分析。

  • 当对一个可分析的语句进行 EXPLAIN 操作时,MySQL 会显示优化器的查询执行计划,也就是 MySQL 会分析出如何处理这条语句,包括不同表之间时如何联合的。关于如何使用 EXPLAIN 来获取查询执行计划信息可以查阅 8.2 EXPLAIN 输出格式

  • 当 EXPLAIN 对 FOR CONNECTION connection_id 执行而不是对可分析语句执行的话,它会显示当前命名连接正在执行语句的执行计划,详情可查阅 8.8.4 获取命名连接的执行计划信息

  • 对于 SELECT 语句来说,EXPLAIN 会产生额外的查询执行计划信息,可以通过 SHOW WARNINGS 语句来获取这些额外信息。详情可查阅 8.8.3 扩展 EXPLAIN 输出格式

  • EXPLAIN 对于考察分区数据表的查询非常有用。详情可查阅 23.3.5 Obtaining Information About Partitions

  • 可以使用 FORMAT 选项来控制输出格式。TRADITIONAL 是默认的输出格式代表以表格的形式输出,JSON 会以 JSON 的格式输出数据。

通过 EXPLAIN ,可以知道在哪里添加索引来加速查找行,从而加速语句的执行。也可以通过 EXPLAIN 语句来检查优化器是否以最优的方式来联合表。使用 SELECT STRAIGHT_JOIN 语句代替 SELECT 语句,来让优化器按照指定的顺序来联合表,详情可查阅 13.2.10, “SELECT Statement”。使用 STRAIGHT_JOIN 的时候会禁用半联合转换,从而不能有效的使用索引。详情可查阅 [8.2.2.1 使用半联合转换优化 IN 和 EXIST 子查询]。

优化器追踪提供的信息有时可以和 EXPLAIN 互补。但是优化器追踪的输出格式会随着版本的变化而变化。关于优化器追踪的详细信息可查阅 MySQL Internals: Tracing the Optimizer.

有时候在你明确已经使用了索引的时候,但执行计划中没有使用索引,你可以执行 ANALYZE TABLE 来更新表的统计信息(如键的基数等)从而改变优化器的选择。详细信息可查阅 13.7.3.1 ANALYZE TABLE Statement

Note
EXPLAIN 也可以用于获取表的列信息。 EXPLAIN tbl_nameDESCRIBE tbl_nameSHOW COLUMNS FROM tbl_name 的功能是一样的。详细信息可查阅 13.8.1 DESCRIBE Statement13.7.7.5 SHOW COLUMNS Statement

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值