服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - Mysql - Mysql如何查看是否使用到索引

Mysql如何查看是否使用到索引

2022-12-24 16:24漫天雪_昆仑巅 Mysql

这篇文章主要介绍了Mysql如何查看是否使用到索引问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

Mysql查看是否使用到索引

mysql数据库创建索引优化之后,在查询时想看下是否使用到索引,

使用执行计划查看:

?
1
2
3
4
5
6
7
8
9
10
mysql> explain  SELECT * FROM tb_user
 WHERE STATUS=1 limit 0,20;
+----+-------------+----------------+------------+------+----------------------+----------------------+---------+-------+-------+----------+-------+
| id | select_type | table          | partitions | type | possible_keys        | key                  | key_len | ref   | rows  | filtered | Extra |
+----+-------------+----------------+------------+------+----------------------+----------------------+---------+-------+-------+----------+-------+
|  1 | SIMPLE      | tb_news_online | NULL       | ref  | idx_tb_news_online_9 | idx_tb_news_online_9 | 5       | const | 99494 |      100 | NULL  |
+----+-------------+----------------+------------+------+----------------------+----------------------+---------+-------+-------+----------+-------+
1 row in set
 
mysql> 

EXPLAIN列的解释

  • table:显示这一行的数据是关于哪张表的
  • type:这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、index和ALL
  • type显示的是访问类型,是较为重要的一个指标,结果值从好到坏依次是:system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL ,一般来说,得保证查询至少达到range级别,最好能达到ref。
  • possible_keys:显示可能应用在这张表中的索引。如果为空,没有可能的索引。可以为相关的域从WHERE语句中选择一个合适的语句
  • key:实际使用的索引。如果为NULL,则没有使用索引。很少的情况下,MYSQL会选择优化不足的索引。这种情况下,可以在SELECT语句中使用USE INDEX(indexname)来强制使用一个索引或者用IGNORE INDEX(indexname)来强制MYSQL忽略索引
  • key_len:使用的索引的长度。在不损失精确性的情况下,长度越短越好
  • ref:显示索引的哪一列被使用了,如果可能的话,是一个常数
  • rows:MYSQL认为必须检查的用来返回请求数据的行数
  • Extra:关于MYSQL如何解析查询的额外信息。将在表4.3中讨论,但这里可以看到的坏的例子是Using temporary和Using filesort,意思MYSQL根本不能使用索引,结果是检索会很慢

MySQL查看索引使用情况

?
1
2
3
show status like 'Handler_read%';    
 
show global status like 'Handler_read%';

Mysql如何查看是否使用到索引

  • Handler_read_first:索引中第一条被读的次数。如果较高,表示服务器正执行大量全索引扫描(这个值越低越好)。
  • Handler_read_key:如果索引正在工作,这个值代表一个行被索引值读的次数,如果值越低,表示索引得到的性能改善不高,因为索引不经常使用(这个值越高越好)。
  • Handler_read_next :按照键顺序读下一行的请求数。如果你用范围约束或如果执行索引扫描来查询索引列,该值增加。
  • Handler_read_prev:按照键顺序读前一行的请求数。该读方法主要用于优化ORDER BY ... DESC。
  • Handler_read_rnd :根据固定位置读一行的请求数。如果你正执行大量查询并需要对结果进行排序该值较高。你可能使用了大量需要MySQL扫描整个表的查询或你的连接没有正确使用键。这个值较高,意味着运行效率低,应该建立索引来补救。
  • Handler_read_rnd_next:在数据文件中读下一行的请求数。如果你正进行大量的表扫描,该值较高。通常说明你的表索引不正确或写入的查询没有利用索引。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/vtopqx/article/details/86504206

延伸 · 阅读

精彩推荐
  • Mysqlmysql中blob数据处理方式

    mysql中blob数据处理方式

    本文通过实例代码给大家介绍了mysql中blob数据处理方式,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧...

    徐茂盛4442019-07-11
  • Mysqlmysql连接数设置操作方法(Too many connections)

    mysql连接数设置操作方法(Too many connections)

    下面小编就为大家带来一篇mysql连接数设置操作方法(Too many connections)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看...

    MYSQL教程网4042020-07-21
  • MysqlMySQL 添加、修改、删除表的列及约束等表的定义

    MySQL 添加、修改、删除表的列及约束等表的定义

    这篇文章主要介绍了MySQL 添加、修改、删除表的列及约束等表的定义,需要的朋友可以参考下 ...

    MYSQL教程网2772020-03-21
  • Mysqllinux下mysql 5.1 和 5.7的安装教程

    linux下mysql 5.1 和 5.7的安装教程

    下面小编就为大家分享一篇linux下mysql 5.1 和 5.7的安装教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 ...

    kopshome6192020-08-23
  • MysqlMysql带And关键字的多条件查询语句

    Mysql带And关键字的多条件查询语句

    MySQL带AND关键字的多条件查询,MySQL中,使用AND关键字,可以连接两个或者多个查询条件,只有满足所有条件的记录,才会被返回...

    MYSQL教程网5762020-08-02
  • Mysql不可忽视的MySQL字符集

    不可忽视的MySQL字符集

    字符集是一组符号和编码。collation是一组用于比较字符集中的字符的规则。MySQL的字符集从latin1经过utf8 到utf8mb4 ,算是经历曲折的路线。特别是从使用一个...

    数据和云4842021-03-24
  • MysqlMySQL数据库之数据表操作

    MySQL数据库之数据表操作

    这篇文章主要介绍了MySQL数据库之数据表操作,文章基于MySQL数据库的相关资料展开详细的数据表操作的详情,具有一定的参考价值,需要的小伙伴可以参考...

    彭世瑜psy11142022-10-26
  • MysqlMySQL中表子查询与关联子查询的基础学习教程

    MySQL中表子查询与关联子查询的基础学习教程

    这篇文章主要介绍了MySQL中表子查询与关联子查询的基础学习教程,同时文中也提到了关于关联子查询的查询效率问题,需要的朋友可以参考下 ...

    MYSQL教程网5332020-05-27