MySql执行分析

 select_type: 表示SELECT的类型,常见的有下面几种

SIMPLE: 简单表,不使用连接或子查询的

PRIMARY: 主查询,即外层的查询

UNION: UNION中的第二个或者后面的查询语句

SUBQUERY: 子查询中的第一个SELECT

table: 输出结果集的表

  type: 表示表的连接类型,性能由好到差的连接类型为下面顺序

 system: 表中只有一行,即常量表

const: 单表中最多有一个匹配行,如primary key或unique index

 eq_ref: 对于前面的每一行,在此表中只查询一条记录,也就是多表连接中使用primary key或unique index

ref: 与eq_ref类似,区别在于不是使用primary key或unique index,而是使用普通索引

ref_or_null: 与ref类型,区别在于条件中包含对null的查询

 index_merge: 索引合并优化

unique_subquery: in的后面是一个查询主键字段的子查询

  index_subquery: 与unique_subquery类似,区别在于in的后面是查询非唯一索引字段的子查询

 range: 单表中的范围查询

 index: 对于前面的每一行,都通过查询索引来得到数据

 all: 对于前面的每一行,都通过扫描全表来得到数据

possible_keys: 查询时可能用到的索引

key: 查询时实际使用到的索引

 key-len: 索引字段的长度

 rows: 扫描行的数量

Extra: 执行情况的说明和描述

例如:

EXPLAIN SELECT SUM(money) FROM sales s,company c WHERE s.company_id=c.id AND s.year=2006 \G;

*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: s
type: ref
possible_keys: index_seles_year
key: index_sales_year
key_len: 2
ref: const
rows: 1
Extra: Using where

*************************** 2. row ***************************
id: 1
select_type: SIMPLE
table: c
type: ref
possible_keys: index_company_id
key: index_company_id
key_len: 5
ref: sakila.c.company_id
rows: 1
Extra: Using where; Using index

时间: 2024-10-04 10:02:32

MySql执行分析的相关文章

MySQL触发器分析

触发器是一种特殊的存储过程,它在插入,删除或修改特定表中的数据时触发执行,它比数据库本身标准的功能有更精细和更复杂的数据控制能力. 数据库触发器有以下的作用: 1.安全性.可以基于数据库的值使用户具有操作数据库的某种权利. # 可以基于时间限制用户的操作,例如不允许下班后和节假日修改数据库数据. # 可以基于数据库中的数据限制用户的操作,例如不允许股票的价格的升幅一次超过10%. 2.审计.可以跟踪用户对数据库的操作. # 审计用户操作数据库的语句. # 把用户对数据库的更新写入审计表. 3.实

一个最不可思议的MySQL死锁分析

一个最不可思议的MySQL死锁分析 死锁问题背景 做MySQL代码的深入分析也有些年头了,再加上自己10年左右的数据库内核研发经验,自认为对于MySQL/InnoDB的加锁实现了如指掌,正因如此,前段时间,还专门写了一篇洋洋洒洒的文章,专门分析MySQL的加锁实现细节:<MySQL加锁处理分析>. 但是,昨天"润洁"同学在<MySQL加锁处理分析>这篇博文下咨询的一个MySQL的死锁场景,还是彻底把我给难住了.此死锁,完全违背了本人原有的锁知识体系,让我百思不得

MySQL执行计划 EXPLAIN参数

MySQL执行计划参数详解 转http://www.jianshu.com/p/7134286b3a09 MySQL数据库中,在SELECT查询语句前边加上“EXPLAIN”或者“DESC”关键字,即可查看该查询语句的执行计划,分析执行计划是优化慢查询的重要手段.如: EXPLAIN SELECT * FROM school; DESC SELECT * FROM school; 执行结果: 执行计划参数.png 接下来对这10个参数进行简单解释: 1.id:在整个查询中SELECT的位置: 2

MySQL协议分析2

MySQL协议分析 议程 协议头 协议类型 网络协议相关函数 NET缓冲 VIO缓冲 MySQL API 协议头 ● 数据变成在网络里传输的数据,需要额外的在头部添加4 个字节的包头. . packet length(3字节), 包体的长度 . packet number(1字节), 从0开始的递增的 ● sql “select 1” 的网络协议是? 协议头 ● packet length三个字节意味着MySQL packet最大16M大于16M则被分包(net_write_command, m

nodejs cannot find module &#39;mysql&#39; 问题分析

在windows平台下,测试nodejs连接mysql数据库. 首先 在控制台中安装mysql依赖包 npm install mysql 安装成功后,mysql依赖包可以在User目录中的node_modules文件夹中找到 然后新建一个测试mysql连接的js文件mysqltest.js var mysql = require('mysql'); var connect = mysql.createConnection({ host:'localhost', user:'root', pass

MySQL定期分析检查与优化表

定期分析表 ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] 本语句用于分析和存储表的关键字分布.在分析期间,使用一个读取锁定对表进行锁定.这对于MyISAM, BDB和InnoDB表有作用.对于MyISAM表,本语句与使用myisamchk -a相当. MySQL使用已存储的关键字分布来决定,当您对除常数以外的对象执行联合时,表按什么顺序进行联合. mysql> analyze table a; +--------

Mysql explain分析SQL语句之字段属性说明

在 explain的帮助下,您就知道什么时候该给表添加索引,以使用索引来查找记录从而让select 运行更快.如果由于不恰当使用索引而引起一些问题的话,可以运行 analyze table来更新该表的统计信息,例如键的基数,它能帮您在优化方面做出更好的选择. explain 返回了一行记录,它包括了 select语句中用到的各个表的信息.这些表在结果中按照mysql即将执行的查询中读取的顺序列出来.mysql用一次扫描多次连接(single- sweep,multi-join)的方法来解决连接.

MySQL执行计划显示与执行过程不符合一例

一 建表和现象的过程如下 CREATE TABLE t1 (id1 INT, a1 INT, b1 INT, PRIMARY KEY(id1));CREATE TABLE t3 (id3 INT UNIQUE, a3 INT, b3 INT); INSERT INTO t1 VALUES (1, 1, NULL);INSERT INTO t3 VALUES (1, 1, NULL); mysql> select * from (select * from t1 where id1 =(selec

MySQL执行计划复习

MySQL执行计划分析 Ⅰ.认识执行计划的每个字段 ([email protected]) [(none)]> desc select 1; +----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+----------------+ | id | select_type | table | partitions | type | possib