mysql中如何查看sql语句是否用到索引,以及分析一条SQL的性能瓶颈

mysql中如何查看sql语句是否用到索引

1、操作步骤
1.1 使用explain ,放在sql前面
mysql中如何查看sql语句是否用到索引,以及分析一条SQL的性能瓶颈_第1张图片
2、解释
我们只需要注意一个最重要的type 的信息很明显的提现是否用到索引:

type结果值从好到坏依次是:

system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL

一般来说,得保证查询至少达到range级别,最好能达到ref,否则就可能会出现性能问题。

possible_keys:sql所用到的索引

key:显示MySQL实际决定使用的键(索引)。如果没有选择索引,键是NULL

rows: 显示MySQL认为它执行查询时必须检查的行数

3、profiling分析
想要优化一条query sql ,就要清楚这条query的性能瓶颈在哪里,mysql的profiler是一个非常方便的查询诊断分析工具,通过该工具可以获取一条查询在整个执行过程中多种资源的消耗情况,例如内存消耗、I/O消耗和CPU消耗
profile的语法结构:
show profile [type [,type] …]
[for query n]
[limit row_count [offset offset]]
其中type参数可选含义如下:
all:显示所有信息
block io:显示输入输出操作阻塞的数量
context switches:显示自动或非自动context switches的数量
cpu:显示系统和用户CPU使用的时间
ipc:显示信息发送和接受的数量
memory:内存的信息
page faults:显示主要的page faults数量
source:显示函数的名称,并且是那些函数所在文件的名字和行数
swaps:显示swap数量

开启profile
set profiling = 1;
mysql中如何查看sql语句是否用到索引,以及分析一条SQL的性能瓶颈_第2张图片
开启query profiler功能之后,MySQL就会自动记录所有执行的query的profile信息
select count(*) from customers1;
通过执行show profiles 命令获取当前系统中保存的多个query的profile的概要信息
mysql中如何查看sql语句是否用到索引,以及分析一条SQL的性能瓶颈_第3张图片
针对单个query获取详细的profile信息(根据概要信息中的query_id来获取)
show profile for query 5;

mysql中如何查看sql语句是否用到索引,以及分析一条SQL的性能瓶颈_第4张图片
mysql中如何查看sql语句是否用到索引,以及分析一条SQL的性能瓶颈_第5张图片

你可能感兴趣的:(mysql)