您的位置:首页 > 数据库 > MySQL

MySql优化2——索引与性能分析

2017-07-06 17:22 369 查看

一、通过命令查看性能分析报告

set @@profiling=1;
select * from talbe;
show profiles;


二、进行计划分析

explain select * from event;

得出的结果为以下字段:
id|select_type|table|type|possible_keys|key|key_len|ref|rows|Extra


id 查询的序列号

select_type 查询的类型,包括:普通查询、联合查询和子查询

table

type 联合查询使用的类型

possible_keys 使用哪个索引在该表中找到该行,如果这个值是空值,则表示没有相关的索引,这时性能有待提升。

key 实际使用的键,如果没有为null

key_len 键长度

ref 显示哪个字段或常数与key一起被使用

rows 这个值表示mysql要遍历多少行才能找到数据

Extra 如果显示onley index表示使用了索引;如果显示where used则使用了where

using filesort表示使用了orderby 和group by

select tables optimized way:使用聚合函数,并且mysql进行了快速定位。通常是使用了max,min,count等。

type显示的类型是重要的性能指标,由好到坏分别是:

system 系统表

const 读常量

eq_ref 最多一条匹配结果,通常是通过主键访问

ref 被驱动表索引引用

fulltext 全文索引检索

ref_or_null 带空值的索引查询

index_merge 合并索引结果集

unique_subquery 子查询中返回的字段是唯一组合或索引

index_subquery 子查询返回的是索引,但非主键

range 索引范围扫描

index 全索引扫描

All 全表扫描

总结:一般来说,保证查询至少达到range级,最好能达到ref级,all为全表扫描,是最坏的情况。
这种情况往往是没用上索引。


mysql索引建立的基本原则:

合理设计和使用索引

在关键字段的索引上,建与不建索引,查询的速度相关100倍。

差的索引和没有索引效果一样

索引并非越多越好,因为维护索引需要成本。

每个表的索引应在5个以下,应合理利用部分索引和联合索引。

不在结果集单一的字段上建索引,比如sex,作用不会太大。

建索引的字段结果集最好分布均匀,或者符合正太分布。

推荐:

MySql优化1——SQL语句优化

MySql优化3——服务器与配置优化
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: