前言:
Mysql 性能优化知识,不是一篇文章就能说明白的,今天,咱们就简单的来通过一些命令,先来了解数据库的一些属性及知道如何下手进行一些性能方面的调优
正文:
MySql 中,数据库分析工程师最常用的一个指令 “SHOW STATUE”,使用此命令,可以查看数据库的一些性能及运行情况等。那么他的后面可以跟一些什么参数来具体查询信息呢
Connections | 连接mysql服务器的次数 |
Uptime | mysql服务器的上线时间(uptime的单位为妙) |
Slow_queries | 慢查询的次数 |
Com_select | 查询操作的次数 |
Com_insert | 插入操作的次数 |
Com_update | 更新操作的次数 |
Com_delete | 删除操作的次数 |
下面是命令的使用方法:
命令: SHOW STATUS LIKE 'CONNECTIONS' 命令: SHOW STATUS LIKE 'Uptime' 命令: SHOW STATUS LIKE 'Slow_queries' 命令: SHOW STATUS LIKE 'Com_select' 命令: SHOW STATUS LIKE 'Com_insert' 命令: SHOW STATUS LIKE 'Com_update' 命令: SHOW STATUS LIKE 'Com_delete'
Explain 命令,也是常用的分析查询语句性能的一个利器,他能分析出Mysql内部解析器语句的运行状况
使用方法: Explain + SQL 语句 例如: Explain select * form user where ...
执行结果如图:
字段解释:
1、Id字段,字段代表的是在mysql内部加载的顺序,遵循如下几个规则:
Id相同的,从上往下顺序执行,Id不同的,较大的先执行
2、select_type如下:
SIMPLE | 表示简单查询,其中不包括连接查询和子查询 |
PRIMARY | 表示主查询,或者是最外层的查询语句 |
UNION | 表示连接查询的第2个或者后面的查询语句 |
DEPENDENT UNION | 连接查询中的第2个或者后面的select语句 |
UNION RESULT | 连接查询的结果 |
SUBQUERY | 子查询的第1个select语句 |
DEPENDENT SUBQUERY | 子查询的第1个select,取决于外面的查询 |
DERIVED | 在FROM列表中包含子查询被标记为DERIVED |
3、table 查询的关于哪张表的表名,如有使用别名,就显示的别名的名字
4、type,表示访问类型
system | 只有一条记录,最理想情况,基本不可能出现 |
const | 扫描了索引,一次九完成的 |
qe_ref | 唯一性的索引扫描 |
ref | 非唯一性的索引扫描,返回匹配的多行 |
ref_or_null | 该连接类型如果ref,但是如果添加了mysql可以专门搜索包含null值的行,在解决子查询中经常使用该连接类型的优化 |
index_merge | 该连接类型表示使用了索引合并优化方法 |
unique_subquery | 该类型替换了下面形式的in子查询的ref。是一个索引查询函数,可以完全替代子查询,效率更高 |
index_subquery | 该连接类型类似于unique_subquery,可以替换in子查询,但是只适合下列形式的子查询中非唯一索引 |
range | 使用了between and之类的语句,缩小了范围 |
index | 遍历了索引树 |
all | 对于前面的表的任意行组合,进行完整的表扫描 |
5、possible_key 和 key
possible_key 是代表mysql分析后认为可能会用到的索引,这个不关键,关键的是key这个字段,它代表了实际所用到的索引
6、ref 表示那些值被用于索引列的查找
7、rows 总共查询多少行
8、extra 额外信息,比较重要的一些信息
1.using filesort 出现这个说明mysql引用自己的排序,也就是没有按照索引来
2.using temprary 出现这个说明mysql先创建了一张临时表,然后再在这个临时表里操作,再删除这个表,性能较差
3.using index 使用了索引,性能不错
结束:
通过数据库调优及性能分析之后,愿程序员写出来的代码越来越高性能。