广告
返回顶部
首页 > 资讯 > 数据库 >MySQL中复合索引和覆盖索引的区别详解
  • 358
分享到

MySQL中复合索引和覆盖索引的区别详解

MySQL复合索引MySQL覆盖索引 2023-11-23 10:11:22 358人浏览 泡泡鱼
摘要

目录前言准备复合索引覆盖索引总结前言准备 我们先准备一张表和几个字段,方便介绍覆盖索引和复合索引。 创建一个user表,表中有id、name、school、age字段。 字段名字段类型idintnamevarcharsc

前言准备

我们先准备一张表和几个字段,方便介绍覆盖索引和复合索引。

创建一个user表,表中有id、name、school、age字段。

字段名字段类型
idint
namevarchar
schoolvarchar
ageint

复合索引

先来说复合索引,复合索引是一种索引,它包含多个字段,复合索引能够使一个sql查询多个条件时也能走索引,提高查询性能。

比如,创建一个name、school和age的复合索引:

CREATE INDEX idx_name_school_age ON user(name, school, age);

查询SQL为:

select * from user where name = '张三' and school = '北京大学' and age > 18

注意,在这里要注意查询条件的顺序要按照复合索引的字段顺序,要是不按照复合索引的顺序,通常情况下是不会走索引的,因为复合索引是按照最左匹配原则,最左匹配原则的意思是查询条件的顺序要按照复合索引字段顺序。

为什么要说通常情况下不走索引呢,是因为Mysql的查询优化器会根据条件查询和数据分布情况选择最优的执行计划,假设,我们把school和name的查询条件到换一下,变成:

select * from user where school = '北京大学' and name = '张三' and age > 18

如果,我们条件中的school的值非常稀疏,name和age的值非常密集,那么mysql在查询时会认为使用索引能够加速查询,也会使用索引。

这里,有些同学可能会对稀疏和密集这两个词有些困惑,不明白这两个词的意思,在这里要单独拿出来说一下,下面往user表中增加五条数据,做为案例数据:

idnameschoolage
1张三北京大学18
2李四北京大学18
3王五清华大学18
4赵六北京大学18
5金七清华大学18

稀疏的意思是每个不同的值出现的次数很多,比如说user表中有五条记录,name字段分别有张三、李四、王五、赵六、金七,那么我们就可以说name这个字段非常稀疏;

那么相反,密集就好理解了,比如,user表school字段的值分别只有北京大学和清华大学,那么就可以说school字段的值非常密集。

总之,MySQL的查询优化器会根据条件查询和数据分布情况选择最优的执行计划,并不是说我们不按照复合索引的字段顺序做查询条件就不会走复合索引。

覆盖索引

覆盖索引是一种索引优化手段,假设,我们想查询user表中name等于张三,获取张三的school和age字段数据,那么我们的SQL应该是:

slelect school, age from user where name = '张三'

那么,为了优化这个查询SQL,我们就需要创建一个复合索引,复合索引中有name、school和age字段:

CREATE INDEX idx_name_school_age ON user(name, school, age);

当我们查询SQL时,MySQL就可以直接从索引中获取所需要的数据,不需要再回表查询数据了,这样就能大大的提高查询速度。

在这里介绍一下回表: 假设,我们创建一个复合索引,复合索引中有name和age字段:

CREATE INDEX idx_name_school_age ON user(name, age);

我们这里写一个查询SQL,SQL中查询name等于张三的school和age字段值:

slelect school, age from user where name = '张三'

那么在查询时,SQL语句会直接查询索引,从索引中查询到name叫做张三的数据位置,再根据位置去表中查询完整的数据,这里,根据位置去表中查询完整的数据叫做回表。

总结

覆盖索引和复合索引的区别是:覆盖索引是一种索引优化技术,而复合索引是一种索引。

使用复合索引时应该注意查询SQL条件的顺序,以及要避免回表,从而影响到查询效率。

到此这篇关于MySQL中复合索引和覆盖索引的区别详解的文章就介绍到这了,更多相关MySQL复合索引和覆盖索引内容请搜索编程网(www.cppcns.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网(www.cppcns.com)!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL中复合索引和覆盖索引的区别详解

本文链接: https://www.lsjlt.com/news/548731.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL中复合索引和覆盖索引的区别详解
    目录前言准备复合索引覆盖索引总结前言准备 我们先准备一张表和几个字段,方便介绍覆盖索引和复合索引。 创建一个user表,表中有id、name、school、age字段。 字段名字段类型idintnamevarcharsc...
    99+
    2023-11-23
    MySQL 复合索引 MySQL 覆盖索引
  • 详解MySQL覆盖索引、索引下推
    目录 1.覆盖索引 1.1.概述 1.2.聚集索引、非聚集索引 1.3.回表查询 1.4.覆盖索引 2.索引下推 1.覆盖索引 1.1.概述 覆盖索引,是为了避免“回表查询”,从而降低查询耗时的一种使用索引的方法,所以要聊覆盖索引首先我...
    99+
    2023-09-10
    数据库 java 开发语言
  • mysql聚集索引、辅助索引、覆盖索引、联合索引的使用
    目录聚集索引(Clustered Index)辅助索引(Secondary Index)覆盖索引(Covering index)联合索引《MySQL技术内幕 InnoDB存储引擎》学...
    99+
    2022-11-13
  • mysql中聚集索引、辅助索引、覆盖索引、联合索引怎么用
    这篇文章主要介绍了mysql中聚集索引、辅助索引、覆盖索引、联合索引怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。聚集索引(Clustered Index)聚集索引就是...
    99+
    2023-06-29
  • MySQL回表查询与索引覆盖的区别
    目录回表查询索引覆盖索引下推回表查询 InnoDB索引分为两大类,一类是聚集索引(Clustered Index),一类是非聚集索引(Secondary Index) 聚集索引(聚簇...
    99+
    2023-03-20
    MySQL回表查询与索引覆盖
  • MySQL中的回表和索引覆盖示例详解
    目录索引类型索引结构非聚簇索引查询索引覆盖总结索引类型 聚簇索引: 叶子节点存储的是行记录,每个表必须要有至少一个聚簇索引。使用聚簇索引查询会很快,因为可以直接定位到行记录 普通索引...
    99+
    2022-11-12
  • 如何通过索引提升PHP与MySQL的联合索引和覆盖索引查询效率?
    随着互联网的发展和数据量的增加,数据库的性能优化变得越来越重要。索引是提升数据库查询性能的一种重要手段。在PHP与MySQL的应用中,通过合理使用联合索引和覆盖索引,可以大幅度提升查询效率。本文将介绍如何使用联合索引和覆盖索引进行查询优化,...
    99+
    2023-10-21
    MySQL PHP 索引 关键词:
  • MySQL单列索引和组合索引的区别
    这篇文章主要讲解了“MySQL单列索引和组合索引的区别”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL单列索引和组合索引的区别”吧!  MySQL单...
    99+
    2022-10-18
  • mysql联合索引和普通索引的区别
            MySQL中,联合索引和普通索引都是用于加速查询的索引类型。它们之间的区别在于索引的列数和列的顺序。         普通索引只对单个列进行索引,而联合索引则同时对多个列进行索引,这些列可以按照特定的顺序组合在一起。例如,可...
    99+
    2023-09-07
    mysql 数据库 java
  • MySQL中B树索引和B+树索引的区别详解
    目录1. 多路搜索树2. B树-多路平衡搜索树3. B树索引4. B+树索引总结如果用树作为索引的数据结构,每查找一次数据就会从磁盘中读取树的一个节点,也就是一页,而二叉树的每个节点...
    99+
    2022-11-13
  • MySQL回表查询与索引覆盖的区别是什么
    这篇文章主要介绍“MySQL回表查询与索引覆盖的区别是什么”,在日常操作中,相信很多人在MySQL回表查询与索引覆盖的区别是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL回表查询与索引覆盖的区别...
    99+
    2023-07-05
  • MySQL 普通索引和唯一索引的区别详解
    1 概念区分 普通索引和唯一索引 普通索引可重复,唯一索引和主键一样不能重复。 唯一索引可作为数据的一个合法验证手段,例如学生表的身份证号码字段,我们人为规定该字段不得重复,那么就使用唯一索引。(一般...
    99+
    2022-05-25
    MySQL 普通索引 MySQL 唯一索引
  • 详解MySQL单列索引和联合索引
    目录一、简介二、单列索引三、最左前缀原则四、同时存在联合索引和单列索引(字段有重复)五、联合索引本质六、索引失效七、其它知识点八、mysql存储引擎简介九、索引结构(方法、算法)一、简介 利用索引中的附加列,可以缩小搜索...
    99+
    2022-09-22
  • MySQL聚簇索引和非聚簇索引的区别详情
    目录聚簇索引非聚簇索引总结前言: 在 mysql 默认引擎 InnoDB 中,索引大致可分为两类:聚簇索引和非聚簇索引,它们的区别也是常见的面试题,所以我们今天就来盘它们。 聚簇索引 聚簇索引(Clustered Ind...
    99+
    2022-06-14
    MySQL聚簇索引 MySQL非聚簇索引
  • MySQL的B+树索引和hash索引的区别
    简述一下索引: 索引是数据库表中一列或多列的值进行排序的一种数据结构;索引分为聚集索引和非聚集索引,聚集索引查询类似书的目录,快速定位查找的数据,非聚集索引查询一般需要再次回表查询一次,如果不使用索引就会进行全表扫描;还有可以进行多字段...
    99+
    2016-10-05
    MySQL的B+树索引和hash索引的区别
  • mysql中关于覆盖索引的知识点总结
    如果一个索引包含(或覆盖)所有需要查询的字段的值,称为‘覆盖索引'。 覆盖索引是一种非常强大的工具,能大大提高查询性能,只需要读取索引而不需要读取数据,有以下优点: 索引项通常比记录要小,所以MySQL访问更少的数据...
    99+
    2022-05-17
    mysql 覆盖索引
  • MySQL中的组合索引与单列索引的区别有哪些
    本篇内容介绍了“MySQL中的组合索引与单列索引的区别有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!...
    99+
    2022-10-18
  • Swoole和Workerman对PHP与MySQL的索引扫描和索引覆盖查询的优化方法
    引言:在大规模的Web应用中,数据库查询的性能优化是至关重要的。索引是一种非常有效的优化手段之一,可以加快查询的速度。针对PHP与MySQL的索引扫描和索引覆盖查询,本文将介绍如何使用Swoole和Workerman来进行优化,并提供具体的...
    99+
    2023-10-21
    优化方法 Workerman 关键词:swoole
  • mysql聚集索引和非聚集索引的区别
    本篇内容介绍了“mysql聚集索引和非聚集索引的区别”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!总结:1...
    99+
    2022-10-18
  • MySQL中的聚簇索引、非聚簇索引、联合索引和唯一索引详细介绍
    目录一、索引类型二、聚簇索引和非聚簇索引三、覆盖索引四、联合索引最左前缀匹配原则索引下推五、唯一索引一、索引类型 索引根据底层实现可分为B-Tree索引和哈希索引,大部分时候我们使用的都是B-Tree索引,因为它良好的性...
    99+
    2023-04-19
    MySQL索引 MySQL聚簇索引 MySQL非聚簇索引 MySQL联合索引 MySQL唯一索引
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作