MySQL 5.7以后怎么查看索引使用情况?

0.在sys库中查看没用的索引

root@localhost [sys]>select * from schema_unused_indexes;
+-------------------+-------------+------------+
| object_schema | object_name | index_name |
+-------------------+-------------+------------+
| sysbench_testdata | sbtest1 | k_1 |
| sysbench_testdata | sbtest10 | k_10 |
| sysbench_testdata | sbtest3 | k_3 |
| sysbench_testdata | sbtest4 | k_4 |
| sysbench_testdata | sbtest5 | k_5 |
| sysbench_testdata | sbtest6 | k_6 |
| sysbench_testdata | sbtest7 | k_7 |
| sysbench_testdata | sbtest8 | k_8 |
| sysbench_testdata | sbtest9 | k_9 |
+-------------------+-------------+------------+
9 rows in set (0.00 sec)
  1. 通过show status like '%Handler_read%'方法查看:整体的
root@localhost [sysbench_testdata]>show status like '%Handler_read%';
+-----------------------+---------+
| Variable_name | Value |
+-----------------------+---------+
| Handler_read_first | 7 |
| Handler_read_key | 29 |
| Handler_read_last | 0 |
| Handler_read_next | 8446377 |
| Handler_read_prev | 0 |
| Handler_read_rnd | 20 |
| Handler_read_rnd_next | 8344612 |
+-----------------------+---------+
7 rows in set (0.00 sec)
  • Handler_read_key这个值代表了一个行将索引值读的次数,很低的值表明增加索引得到的性能改善不高,因为索引并不经常使用。

  • Handler_read_rnd_next 的值高则查询低效,并且应该建立索引补救。这个值是指在数据文件中读下一行的请求数。如果正进行大量的表扫描,Handler_read_rnd_next的值较高,则通常说明表索引不正确或查询没有利用索引

2.查看具体某一个sql的索引使用情况 :

root@localhost [sysbench_testdata]>explain select k from sbtest2 where k=432 limit 2;
+----+-------------+---------+------------+------+---------------+------+---------+-------+--------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+---------+------------+------+---------------+------+---------+-------+--------+----------+-------------+
| 1 | SIMPLE | sbtest2 | NULL | ref | k_2 | k_2 | 4 | const | 110944 | 100.00 | Using index |
+----+-------------+---------+------------+------+---------------+------+---------+-------+--------+----------+-------------+
1 row in set, 1 warning (0.00 sec)

字段说明:

Type:告诉我们对表所使用的访问方式,主要包含如下集中类型;

◇ all:全表扫描

◇ const:读常量,且最多只会有一条记录匹配,由于是常量,所以实际上只需要读一次;

◇ eq_ref:最多只会有一条匹配结果,一般是通过主键或者唯一键索引来访问;

◇ fulltext:

◇ index:全索引扫描;

◇ index_merge:查询中同时使用两个(或更多)索引,然后对索引结果进行merge 之后再读取表数据;

◇ index_subquery:子查询中的返回结果字段组合是一个索引(或索引组合),但不是一个主键或者唯一索引;

◇ rang:索引范围扫描;

◇ ref:Join 语句中被驱动表索引引用查询;

◇ ref_or_null:与ref 的唯一区别就是在使用索引引用查询之外再增加一个空值的查询;

◇ system:系统表,表中只有一行数据;

◇ unique_subquery:子查询中的返回结果字段组合是主键或者唯一约束;

possible_keys:可能可以利用的索引的名字。这里的索引名字是创建索引时指定的索引昵称;如果索引没有昵称,则默认显示的是索引中第一个列的名字(在本例中,它是“firstname”)。默认索引名字的含义往往不是很明显。  

key:它显示了MySQL实际使用的索引的名字。如果它为空(或NULL),则MySQL不使用索引。  

key_len:索引中被使用部分的长度,以字节计

ref:列出是通过常量(const),还是某个表的某个字段(如果是join)来过滤(通过key)

的;

rows:MySQL所认为的它在找到正确的结果之前必须扫描的记录数。显然,这里最理想的数字就是1。

3.通过performance_schema可以查询到.查看sbtest2表索引情况的查询语句:

root@localhost [sysbench_testdata]>select object_type,object_schema,object_name,index_name,count_star,count_read,COUNT_FETCH from performance_schema.table_io_waits_summary_by_index_usage where object_name='sbtest2';
  • 具体查看过程:
root@localhost [sysbench_testdata]>select object_type,object_schema,object_name,index_name,count_star,count_read,COUNT_FETCH from performance_schema.table_io_waits_summary_by_index_usage where object_name='sbtest2';
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 1697669
Current database: sysbench_testdata +-------------+-------------------+-------------+------------+------------+------------+-------------+
| object_type | object_schema | object_name | index_name | count_star | count_read | COUNT_FETCH |
+-------------+-------------------+-------------+------------+------------+------------+-------------+
| TABLE | sysbench_testdata | sbtest2 | PRIMARY | 0 | 0 | 0 |
| TABLE | sysbench_testdata | sbtest2 | k_2 | 76287298 | 76287298 | 76287298 |
| TABLE | sysbench_testdata | sbtest2 | NULL | 8344631 | 8344631 | 8344631 |
+-------------+-------------------+-------------+------------+------------+------------+-------------+
3 rows in set (0.00 sec) root@localhost [sysbench_testdata]>select k from sbtest2 where k=432 limit 2;
+-----+
| k |
+-----+
| 432 |
| 432 |
+-----+
2 rows in set (0.00 sec) root@localhost [sysbench_testdata]>select object_type,object_schema,object_name,index_name,count_star,count_read,COUNT_FETCH from performance_schema.table_io_waits_summary_by_index_usage where object_name='sbtest2';
+-------------+-------------------+-------------+------------+------------+------------+-------------+
| object_type | object_schema | object_name | index_name | count_star | count_read | COUNT_FETCH |
+-------------+-------------------+-------------+------------+------------+------------+-------------+
| TABLE | sysbench_testdata | sbtest2 | PRIMARY | 0 | 0 | 0 |
| TABLE | sysbench_testdata | sbtest2 | k_2 | 76287300 | 76287300 | 76287300 |
| TABLE | sysbench_testdata | sbtest2 | NULL | 8344631 | 8344631 | 8344631 |
+-------------+-------------------+-------------+------------+------------+------------+-------------+
3 rows in set (0.01 sec) root@localhost [sysbench_testdata]>select k from sbtest2 where id=432 limit 2;
+-------+
| k |
+-------+
| 49866 |
+-------+
1 row in set (0.00 sec) root@localhost [sysbench_testdata]>select object_type,object_schema,object_name,index_name,count_star,count_read,COUNT_FETCH from performance_schema.table_io_waits_summary_by_index_usage where object_name='sbtest2';
+-------------+-------------------+-------------+------------+------------+------------+-------------+
| object_type | object_schema | object_name | index_name | count_star | count_read | COUNT_FETCH |
+-------------+-------------------+-------------+------------+------------+------------+-------------+
| TABLE | sysbench_testdata | sbtest2 | PRIMARY | 1 | 1 | 1 |
| TABLE | sysbench_testdata | sbtest2 | k_2 | 76287300 | 76287300 | 76287300 |
| TABLE | sysbench_testdata | sbtest2 | NULL | 8344631 | 8344631 | 8344631 |
+-------------+-------------------+-------------+------------+------------+------------+-------------+
3 rows in set (0.00 sec) root@localhost [sysbench_testdata]>

MySQL 5.7以后怎么查看索引使用情况?的更多相关文章

  1. mysql如何查看索引使用情况以及优化 - guols0612

    mysql中支持hash和btree索引.innodb和myisam只支持btree索引,而memory和heap存储引擎可以支持hash和btree索引 我们可以通过下面语句查询当前索引使用情况: ...

  2. MySQL中EXPLAIN解释命令 查看索引是否生效

    explain显示了mysql如何使用索引来处理select语句以及连接表.可以帮助选择更好的索引和写出更优化的查询语句. 使用方法,在select语句前加上explain就可以了: 如: expla ...

  3. sqlserver查看索引使用情况以及建立丢失的索引

    --查看表的索引使用情况SELECT TOP 1000o.name AS 表名, i.name AS 索引名, i.index_id AS 索引id, dm_ius.user_seeks AS 搜索次 ...

  4. SQLserver查看索引使用情况

    查索引使用情况:    https://www.cnblogs.com/sunliyuan/p/6559354.html select db_name(database_id) as N'TOPK_T ...

  5. mysql 查看索引使用情况

    show status like 'Handler_read%'; Handler_read_key  代表着一个行被索引值读取的次数,值很低表明索引不经常用到,增加索引对性能改善不高. Handle ...

  6. SQL SERVER查看索引使用情况

    SELECT DISTINCT DB_NAME() AS N'db_name' , E.name AS N'schema_name' , OBJECT_NAME(a.object_id) AS N't ...

  7. 我的MYSQL学习心得(九) 索引

    我的MYSQL学习心得(九) 索引 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...

  8. mysql中索引利用情况(explain用法)

    使用explain查看,如下 1.首先创建表test,语句如下 create table test(a int,b varchar(10),c varchar(10)); 2.在表中的a,b都创建索引 ...

  9. mysql服务器变量、缓存及索引

    服务器变量 注意:其中有些参数支持运行时修改,会立即生效:有些参数不支持,且只能通过修改配置文件,并重启服务器程序生效:有些参数作用域是全局的,且不可改变:有些可以为每个用户提供单独(会话)的设置. ...

随机推荐

  1. Python定义函数

    在Python中,定义一个函数要使用def语句,依次写出函数名.括号.括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回. 我们以自定义一个求绝对值的my_abs函数 ...

  2. P3835 【模板】可持久化平衡树

    题目描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作(对于各个以往的历史版本): 插入x数 删除x数(若有多个相同的数,因只删除一个,如果没有请忽略该操作) 查询x数的 ...

  3. BZOJ 2521: [Shoi2010]最小生成树

    2521: [Shoi2010]最小生成树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 445  Solved: 262[Submit][Statu ...

  4. BZOJ 4898 [APIO2017] 商旅 | SPFA判负环 分数规划

    BZOJ 4898 [APIO2017] 商旅 | SPFA判负环 分数规划 更清真的题面链接:https://files.cnblogs.com/files/winmt/merchant%28zh_ ...

  5. 方程式EQGRP_Lost_in_Translation工具之fb.py

    使用方法: 环境搭建:win2003下测试: 下载python2.6并安装 下载pywin32并安装 将C:\Python26添加到环境变量PATH中 将整个windows目录复制到windows20 ...

  6. java多线程 -- 同步鎖

    为了解决多线程安全问题在 Java 5.0 之前,协调共享对象的访问时可以使用的机制只有 synchronized 和 volatile .Java 5.0 后增加了一些新的机制,但并不是一种替代内置 ...

  7. 解题:HEOI 2015 最短不公共子串

    题面 制杖四合一,HEOI以前居然出这种**题,看来HE还是联考比较好= = 首先对第二个串建SAM 第一个简单,以每个位置为起点在SAM上走,失配时更新答案 第二个先在第二个串上预处理$firs[i ...

  8. fzyzojP2984 -- 序列变换问题

    一个区间缩小变换的问题,并且n<=300 启示我们区间dp 我们考虑最后一定是在原串上扣一些,剩一些 所以不妨前求出[l,r]把[l,r]完全处理成什么样子的方案数 然后再来一遍序列dp,统计答 ...

  9. 【DP】【CF1099C】 Postcard

    Description 给定一个长度为 \(n\) 的字符串,尽可能包含小写字母,字符 '?' 和字符 '*'.保证上面两种特殊字符若出现则一定出现在一个小写字母的后面一位.要求构造一个长度为 \(k ...

  10. Windows下CVSNT安装配置

    首先要说明:X64下安装此软件会报 “cvs [login aborted]: WIN-4H9CRJO1TRA\Administrator: Switch to user failed due to  ...