一文了解MySQL二级索引的查询过程

yizhihongxing

让我来详细讲解一下“一文了解MySQL二级索引的查询过程”的完整攻略。

什么是MySQL二级索引

MySQL的二级索引也称为非聚集索引。通俗易懂的解释,就是在主索引外的索引,其存储方式为“单独索引”,不绑定表中的具体行数据。

MySQL二级索引查找流程概述

MySQL的二级索引在查找数据时,是通过B+树来实现的。以下是MySQL二级索引查找流程的概述:

  1. 从二级索引B+树的根节点开始,向下定位到相应的叶子节点;
  2. 找到叶子节点后,在其中搜索符合条件的记录;
  3. 根据叶子节点中记录的索引值定位到对应表中的数据行,获取需要的数据;

MySQL二级索引查找流程详解

数据库表的创建和数据插入

代码示例1:创建测试表,并插入5条数据

CREATE TABLE `order` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `order_no` varchar(50) DEFAULT NULL,
  `goods_id` int(11) DEFAULT NULL,
  `amount` decimal(10,2) DEFAULT NULL,
  `create_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `index_order_goods_id` (`goods_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4;

INSERT INTO `order` (`id`, `order_no`, `goods_id`, `amount`, `create_time`)
VALUES
    (1,'order001',101,55.00,'2022-01-01 00:00:00'),
    (2,'order002',102,66.60,'2022-01-02 10:00:00'),
    (3,'order003',103,77.77,'2022-01-03 10:00:00'),
    (4,'order004',104,88.88,'2022-01-04 10:00:00'),
    (5,'order005',105,99.99,'2022-01-05 10:00:00');

以上是创建了名为order的测试表,并在其中插入了五条数据。这个测试表有主键id、一般索引index_order_goods_id以及其他几个字段。

测试1:查询单个字段的数据

代码示例2:查询goods_id101的数据

SELECT * FROM `order` WHERE `goods_id`=101;

以上是查询goods_id101的数据。

MySQL使用二级索引查找的流程如下:

  1. 使用index_order_goods_id二级索引得到符合条件的记录,例如:指向goods_id=101的B+树节点;
  2. goods_id=101这个节点下,找到该节点下所有的叶子节点;
  3. 遍历所有goods_id=101的叶子节点,并获取主键id的值;
  4. 根据获取的主键id值,再次到主键索引树上查找对应的数据,并返回这些数据;

通过以上流程,MySQL进行了一次二级索引查找。 实际上,MySQL使用的是一个排序较快的查找过程,不需要完全遍历所有索引节点,并且B+树叶子节点指向的是数据行地址,特别适合查找件数很多的数据。

测试2:测试不包含二级索引的查询

代码示例3:查询order_noorder002的数据

SELECT * FROM `order` WHERE `order_no`='order002';

以上查询虽然没有使用二级索引,但 MySQL 同样也会先查找有没有二级索引可以使用。然后若二级索引无法使用,就会直接使用主键索引。

  • MySQL首先会检查二级索引,发现没有与order_no这个列相关联的二级索引。
  • MySQL随后将去访问包含该数据的主键索引树,找到该数据,并返回对应的结果。

总结

以上就是“一文了解MySQL二级索引的查询过程”的完整攻略。通过以上的示例和讲解,我们已经大致掌握了 MySQL 的二级索引的查询过程。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一文了解MySQL二级索引的查询过程 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • MongoDB原子操作的8种方法

    MongoDB原子操作是指一个操作要么全部执行成功,要么全部失败回滚。 MongoDB的原子操作包括: 1. findAndModify:查询并修改一个文档。可以实现对一个文档的原子更新和查询。 示例: db.collection.findAndModify({ query: { name: 'Alice' }, update: { $i…

    MongoDB 2023年3月14日
    00
  • mysql5.7.18解压版启动mysql服务

    下面是关于“mysql5.7.18解压版启动mysql服务”的完整攻略。 准备工作 下载 MySQL 5.7.18 解压版的安装包,解压至指定目录。 确认已经安装了 Java 环境。MySQL 5.7.18 解压版需要使用到 Java 环境,请确保 Java 已经正确安装,并设置环境变量。 步骤 进入 MySQL 解压目录,找到 bin 目录下的mysqld…

    database 2023年5月22日
    00
  • Memcache,Redis,MongoDB(数据缓存系统)方案对比与分析

    一、问题:           数据库表数据量极大(千万条),要求让服务器更加快速地响应用户的需求。   二、解决方案:      1.通过高速服务器Cache缓存数据库数据      2.内存数据库     (这里仅从数据缓存方面考虑,当然,后期可以采用Hadoop+HBase+Hive等分布式存储分析平台) 三、主流解Cache和数据库对比:      …

    Redis 2023年4月13日
    00
  • MySQL关于ERROR 1290 (HY000)报错解决方法

    下面就是详细的MySQL关于ERROR 1290 (HY000)报错解决方法攻略: 1. 问题描述 当用户在使用MySQL时,有时会出现ERROR 1290 (HY000)的报错,此时用户无法继续使用MySQL,其常见的错误信息如下: ERROR 1290 (HY000): The MySQL server is running with the –ski…

    database 2023年5月18日
    00
  • Linux文件系统介绍

    Linux文件系统介绍 Linux文件系统是Linux操作系统中的一个重要组成部分,文件系统是操作系统与磁盘之间的接口,文件系统可以管理磁盘上的文件存储,包括文件的读取,写入和操作等。 文件系统的分类 不同类型的文件系统是针对不同存储介质而实现的,常见的文件系统分类有以下几种: ext系列文件系统:包括ext,ext2,ext3,ext4 XFS文件系统 B…

    database 2023年5月22日
    00
  • PyCharm 设置数据库,查询数据库语句方式

    下面我将给您详细讲解PyCharm设置数据库和查询数据库语句的方式,内容包含以下几个方面: PyCharm如何设置数据库 PyCharm如何使用查询数据库语句 示例说明 1. PyCharm如何设置数据库 在PyCharm中对于一个Python项目,可以使用多种数据库进行开发和测试。下面给出常见关系型数据库的配置示例。首先,在project的settings…

    database 2023年5月18日
    00
  • MySQL中符号@的作用

    当在 MySQL 中使用符号 @ 时,有以下两个常见的作用: 1. 用户变量 用户变量是一种可以保存值以供后续查询使用的变量。在MySQL中,用户变量以 @ 符号开头,后面跟上变量名,例如 @my_variable。 用户变量与普通变量的区别在于,用户变量只在当前连接中有效。也就是说,如果您使用多个连接来访问同一个数据库,则每个连接都有其自己的变量。 以下是…

    database 2023年5月22日
    00
  • MySQL适用于哪些应用场景?

    MySQL是一个开源的关系型数据库管理系统。它的可靠性、性能、灵活性和易用性使得它成为了最受欢迎的数据库之一。 MySQL适用于很多不同的应用场景,下面列出了其中的5个: 1、Web应用程序:MySQL可与Web编程语言如PHP、Python和Java结合使用,为网站提供持久的数据存储解决方案。由于其高度可靠性和短学习曲线,MySQL已成为最受欢迎的Web开…

    2023年3月8日
    00
合作推广
合作推广
分享本页
返回顶部