MySQL 各个索引的使用详解

 更新时间:2020年11月27日 09:32:49   作者:RodmaChen  
这篇文章主要介绍了MySQL 各个索引的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一. 慢查询日志

1.1 MySQL的日志类型

日志用于记录数据库的运行情况,以及用户对数据库执行的各类操作。当数据库发生故障时,可以根据日志分析解决问题,从而对数据库进行恢复。

在这里插入图片描述

1.2 认识慢查询日志

慢查询日志用于记录MySQL数据库中响应时间超过指定阈值的语句。慢查询日志通常也被称之为慢日志,因为它不仅仅只针对SELECT语句,像INSERT、UPDATE、DELETE等语句,只要响应时间超过所设定阈值都会记录在慢查询日志中。

在这里插入图片描述

1.3 如何开启慢查询日志命令

慢查询日志可以通过命令临时设置,也可以修改配置文件永久设置

查看是否开启慢查询日志

show variables like 'slow%';

临时开启慢查询日志

set slow_query_log='ON';
set long_query_time=1;

慢查询日志文件所在位置

show variables like '%datadir%';

二. 查询分析器——EXPLAIN

 2.1 explain简介

explain命令可以查看SQL语句的执行计划。当explain与SQL语句一起使用时,MySQL将显示来自优化器的有关语句执行计划的信息。也就是说,MySQL解释了它将如何处理语句,包括有关如何联接表以及以何种顺序联接表的信息。

explain能做什么?

  • 分析出表的读取顺序
  • 数据读取操作的操作类型
  • 哪些索引可以使用
  • 哪些索引被实际使用
  • 表之间的引用
  • 每张表有多少行被优化器查询

 2.2 explain的使用

explain的使用很简单,只需要在SQL语句之前加上explain命令即可,除select语句外,explain也能分析insert、update和delete语句。

命令解释:

在这里插入图片描述

三. 索引的基本使用

3.1 什么是索引

索引是一种特殊的数据结构,类似于图书的目录,它能够极大地提升数据库的查询效率。如果没有索引,在查询数据时必须扫描表中的所有记录才能找出符合条件的记录,这种全表扫描的查询效率非常低

总结:提高查询效率,就好像垃圾分类一样,把一样效果的东西放在一起,找的时候好找。

3.2 常见的索引种类

索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定记录。

数据库的索引好比一本书的目录,能够加快数据库的查询速度;索引是快速搜索的关键,如果不加索引,查找任何一条特定的数据都会进行一次全表扫描

在这里插入图片描述

3.3 索引的使用

创建索引

创建普通索引

CREATE INDEX indexName ON tableName(columnName(length));

创建唯一索引

CREATE UNIQUE INDEX indexName ON tableName(columnName(length));

创建复合索引

CREATE INDEX indexName ON tableName(columnName1, columnName2, …);

删除索引

DROP INDEX [indexName] ON tableName;

查看索引

SHOW INDEX FROM tableName;

3.4 索引的实战经验

在这里插入图片描述

四. 复合索引前导列特性

复合索引前导列特性:在MySQL中,如果创建了复合索引(name, salary, dept),就相当于创建了 (name, salary, dept)、(name, salary)和(name) 三个索引,因此在创建复合索引时应该将最常用作查询条件的列放在最左边依次递减

列:

未使用索引

select * from employee where salary=8800;
select * from employee where dept='部门A';
select * from employee where salary=8800 and dept='部门A';

使用索引:前面都带有name

select * from employee where name='liufeng';
select * from employee where name='liufeng' and salary=8800;
select * from employee where name='liufeng' and salary=8800 and dept='部门A';

五. 覆盖索引

5.1 什么是覆盖索引

覆盖索引又称之为索引覆盖,即select的数据列只从索引中就能得到,不必读取数据行,也就是只需扫描索引就可以得到查询结果。

关于覆盖索引的几点说明

  1. 使用覆盖索引,只需要从索引中就能检索到需要的数据,而不要再扫描数据表;
  2. 索引的体量往往要比数据表小很多,因此只读取索引速度会非常快,也会极大减少数据访问量;
  3. MySQL的查询优化器会在执行查询前判断,是否有一个索引可以覆盖所有的查询列;
  4. 并非所有类型的索引都可以作为覆盖索引,覆盖索引必须要存储索引列的值。像哈希索引、空间索引、全
  5. 文索引等并不会真正存储索引列的值。

 5.2 如何判断使用了覆盖索引

当一个查询使用了覆盖索引,在查询分析器EXPLAINExtra列可以看到“Using index”

在这里插入图片描述

到此这篇关于MySQL 各个索引的使用详解的文章就介绍到这了,更多相关MySQL 索引使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

本人博客:https://blog.csdn.net/weixin_46654114

相关文章

  • 详解mysql触发器trigger实例

    详解mysql触发器trigger实例

    这篇文章主要为大家介绍了mysql触发器trigger实例 ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • MySQL 重装MySQL后, mysql服务无法启动

    MySQL 重装MySQL后, mysql服务无法启动

    把mysql程序卸载后, 重装, 结果mysql服务启动不了,碰到这个问题的朋友可以参考下。
    2011-08-08
  • 删除MySQL数据库的简单教程

    删除MySQL数据库的简单教程

    这篇文章主要介绍了删除MySQL数据库的简单教程,是MySQL入门学习中的基础知识,需要的朋友可以参考下
    2015-05-05
  • Mysql高效分页详解

    Mysql高效分页详解

    这篇文章主要为大家详细介绍了Mysql高效分页的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • MySQ索引操作命令总结(创建、重建、查询和删除索引命令详解)

    MySQ索引操作命令总结(创建、重建、查询和删除索引命令详解)

    本篇文章主要是对MySQL索引操作方法做了一下总结,包括创建索引、重建索引、查询索引、删除索引的操作
    2014-04-04
  • MySQL与PHP的基础与应用专题之数据查询

    MySQL与PHP的基础与应用专题之数据查询

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,本系列将带你掌握php与mysql的基础应用,本篇从数据的查询开始
    2022-02-02
  • MYSQL中查询LONGBLOB类型数据的大小的详细示例

    MYSQL中查询LONGBLOB类型数据的大小的详细示例

    在MySQL中,LONGBLOB 是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,但是,LONGBLOB 数据类型本身并不直接存储数据的大小(长度),它存储的是二进制数据的实际内容,这篇文章主要介绍了MYSQL中怎么查询LONGBLOB类型数据的大小,需要的朋友可以参考下
    2024-06-06
  • Mysql 5.7.17 解压版(ZIP版)安装步骤详解

    Mysql 5.7.17 解压版(ZIP版)安装步骤详解

    MySQL 社区版 5.7.17 发布了,MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 旗下产品,是最流行的关系型数据库管理系统。下面这篇文章主要介绍了Mysql 5.7.17 解压版的安装步骤,并且介绍了可能会遇到的坑,需要的朋友可以参考下。
    2017-01-01
  • Mysql 5.7.14 使用常见问题汇总(推荐)

    Mysql 5.7.14 使用常见问题汇总(推荐)

    本文给大家分享Mysql 5.7.14 使用常见问题汇总的相关知识及结合自己的实践总结了相关原因,本文介绍的非常详细,具有参考借鉴价值,感兴趣的朋友一起看看吧
    2016-09-09
  • mysqldump造成Buffer Pool污染的研究

    mysqldump造成Buffer Pool污染的研究

    mysqldump造成Buffer Pool污染的研究,需要的朋友可以参考下
    2012-10-10

最新评论