mysql 索引ref_MySQL索引优化-性能分析Explain(转)

本文详细介绍了MySQL的Explain工具,用于分析SQL查询的执行计划,包括表的读取顺序、数据读取操作类型、索引使用情况等。通过分析`id`、`select_type`、`table`、`type`、`possible_keys`、`key`、`ref`、`rows`和`Extra`等字段,帮助优化查询性能,减少全表扫描,提高查询效率。
摘要由CSDN通过智能技术生成

1. explain是什么

使用explain关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的,分析你的查询语句或是表结构的性能瓶颈。

2. explain能干吗

可用于分析:

表的读取顺序

数据读取操作的操作类型

哪些索引可以使用

哪些索引被实际使用

表之间的引用

每张表有多少行被优化器查询

3. explain怎么分析

执行计划包含的信息如下:

b00fa9ba99d5480b856eaf06f15c196b.png

各字段解释

3.1 id

select查询的序列号,包含一组数字,表示查询中执行select子句或操作表的顺序。

分为三种情况:

3.1.1 id相同,执行顺序由上至下

a040b9becdaecebd22cb0a6b6c0c9f33.png

id相同,执行顺序从上到下,搭配table列进行观察可知,执行顺序为t1->t3->t2。

3.1.2 id不同,如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行

969475085073ddaf63a8b483bd9eb12b.png

如果是子查询id的序号会递增,id值越大执行优先级越高,搭配table列可知,执行顺序为t3->t1->t2。

3.1.3 id相同不同,同时存在

8ddcef4f151139ceb91710b495749683.png

id如果相同,可认为是同一组,执行顺序从上到下。在所有组中,id值越大执行优先级越高。所以执行顺序为t3->derived2(衍生表,也可以说临时表)->t2。

总结:id的值表示select子句或表的执行顺序,id相同,执行顺序从上到下,id不同,值越大的执行优先级越高。

3.2 select_type

SIMPLE: 简单的select查询,查询中不包含子查询或者UNION

PRIMARY: 查询中包含任何复杂的子查询,最外层查询被标记为PRIMARY

SUBQUERY: 在SELECT或WHERE列表中包含子查询

DERIVED: 在FROM列表中包含的子查询被标记为DERIVED(衍生),MySQL会递归执行这些子查询,把结果放在临时表里

UNION: 若第二个SELECT出现在UNION之后,则被标记为UNION; 若UNION包含在FROM子句的子查询中,外层SELECT被标记为: DERIVED

UNION RESULT: 从UNION表获取结果的SELECT

3.3 table

显示这一行的数据是关于哪张表的

3.4 type

访问类型,显示查询使用了何种类型,从最好到

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL的`EXPLAIN`语句可以帮助我们分析查询语句的执行计划,从而优化查询性能。下面是一些常见的优化指标和相关的解释: 1. `type`列:表示访问数据的方式,常见的取值有`ALL`、`index`、`range`、`ref`、`eq_ref`、`const`等。一般来说,访问数据的方式越好,性能越高。 2. `key`列:表示使用的索引。如果该列为NULL,则表示没有使用索引索引的选择要尽量满足查询条件,并且覆盖需要返回的数据列。 3. `rows`列:表示MySQL估计需要扫描的行数。行数越少,性能越好。 4. `Extra`列:额外的信息,常见取值有`Using where`、`Using index`、`Using temporary`、`Using filesort`等。这些信息可以帮助我们判断是否存在潜在的性能问题。 根据这些指标,我们可以进行索引优化,以下是一些常见的优化策略: 1. 确保表上有适当的索引。通过分析查询语句的WHERE条件和JOIN条件,选择合适的索引。可以使用`CREATE INDEX`语句来创建索引。 2. 尽量避免全表扫描(即type为`ALL`)。可以通过添加适当的索引优化查询语句或者调整表结构来避免全表扫描。 3. 避免使用临时表(即`Using temporary`)。可以通过优化查询语句,避免使用`GROUP BY`、`DISTINCT`、`UNION`等操作,从而避免使用临时表。 4. 避免使用文件排序(即`Using filesort`)。可以通过添加适当的索引、调整查询语句或者调整排序方式来避免文件排序。 5. 注意使用索引覆盖。索引覆盖是指查询时只使用索引而不需要访问表数据,可以通过合理选择索引和查询列来实现。 以上是一些常见的MySQL索引优化方法,具体的优化策略需要根据具体的查询语句和数据情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值