27 mysql 组合索引 的存储以及使用

前言

这里来看一下 mysql 中索引的 增删改查

查询在前面的系列文章中都有使用到

这里 来看一下 增删改 的相关实现

索引记录 和 数据记录 的处理方式是一致的

这里来看一下 组合索引 的相关, 以及 特性

组合索引的存储以及使用

创建数据表如下, 除了主键之外, 创建了一个 field1, field2 的一个联合索引

复制代码
CREATE TABLE `tz_test_02` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `field1` varchar(12) DEFAULT NULL,
  `field2` varchar(16) DEFAULT NULL,
  `field3` varchar(24) DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  KEY `idx_composite` (`field1`,`field2`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8

将 tz_test 的数据 抽取到 tz_test_02, 然后执行 sql, "update tz_test_02 set field3 = field1;"

执行 sql 如下, "select * from tz_test_02 where field1 = 'field33';"

扫描的记录如下, 可以看到是 走的索引

"field33" 表示的是 field1, "33" 表示的是 field2, 再之后为索引记录映射的主键记录信息

索引记录信息如下

"explpain select * from tz_test_02 where field1 = 'field33';" 结果如下

执行 sql 如下, "select * from tz_test_02 where field2 = 33;"

扫描的记录如下, 可以看到是 走的所有的记录

因为索引的存储是按照顺序存储的 field1,field2 -> id

因此, 查询 field1 的记录可以走索引, 查询 field1 + field2 的记录可以走索引

这个就是 联合索引的左前缀匹配规则的道理

"explpain select * from tz_test_02 where field2 = 33;" 结果如下

相关推荐
Zzzzmo_13 小时前
【MySQL】JDBC(含settings.xml文件配置/配置国内镜像以及pom.xml文件修改)
数据库·mysql
FirstFrost --sy14 小时前
MySQL内置函数
数据库·mysql
eggwyw14 小时前
MySQL-练习-数据汇总-CASE WHEN
数据库·mysql
mygljx17 小时前
MySQL 数据库连接池爆满问题排查与解决
android·数据库·mysql
Bdygsl18 小时前
MySQL(1)—— 基本概念和操作
数据库·mysql
身如柳絮随风扬18 小时前
什么是左匹配规则?
数据库·sql·mysql
jiankeljx19 小时前
mysql之如何获知版本
数据库·mysql
小李来了!19 小时前
数据库DDL、DML、DQL、DCL详解
数据库·mysql
我科绝伦(Huanhuan Zhou)20 小时前
【生产案例】MySQL InnoDB 数据损坏崩溃修复
数据库·mysql·adb
海棠蚀omo21 小时前
从零敲开 MySQL 的大门:库与表的基础操作实战(保姆级入门指南)
数据库·mysql