如何使用explain关键字优化SQL

前言

通常我们使用SQL查询是如何判断SQL的健康程度呢?我们会根据SQL查询时间来判断快慢,还有别的方法吗?

简介

explain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句

使用

EXPLAIN SELECT * FROM tb_account_user WHERE ID=1------------------------------------------------------------------------------------------------------    id  select_type  table            type    possible_keys  key     key_len  ref       rows  Extra   ------  -----------  ---------------  ------  -------------  ------  -------  ------  ------  --------     1  SIMPLE       tb_account_user  system  PRIMARY        (NULL)  (NULL)   (NULL)       1    

EXPLAIN列的解释

id

表示查询(select)的类型:simple(简单表),primary(主查询),union(union中的第二个或者是后面的查询语句),subquery(子查询第一个查询)

select_type

SELECT类型,可以为以下任何一种:

● SIMPLE:简单SELECT(不使用UNION或子查询)

● PRIMARY:最外面的SELECT

● UNION:UNION中的第二个或后面的SELECT语句

● DEPENDENT UNION:UNION中的第二个或后面的SELECT语句,取决于外面的查询

● UNION RESULT:UNION 的结果

● SUBQUERY:子查询中的第一个SELECT

● DEPENDENT SUBQUERY:子查询中的第一个SELECT,取决于外面的查询

● DERIVED:导出表的SELECT(FROM子句的子查询)

table

输出结果集的表

type

表示表中查找所需的行的方式

● type=ALL,全表扫描,遍历全表来找到匹配的行

● type=index 索引全扫描,遍历整个索引来查询匹配的行

● type=range 索引范围扫描,常见于>,>=,<,<=,between等操作符

● type=ref 使用非唯一索引扫描或者唯一索引的前缀扫描,返回匹配某个单独值的记录行

● type=eq_ref 使用的唯一就是唯一索引

● type=const/system 单表中最多有一个匹配行

● type=null 不用访问表或者索引,直接能够得到结果

● type=ref_or_null 查询包含null的查询

● type=index_merge 索引合并优化

● type=unique_subquery  in的后面是一个查询主字段的数据

● type=index_subquery in在后面查询非唯一索引字段的子查询

possible_keys

查询中可能使用的索引

key

表示查询索引

key_len

索引的长度

rows

扫描中的数量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值