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;" 结果如下

相关推荐
海奥华29 小时前
SQLEXPLAIN 详解
数据库·mysql
情深不寿31710 小时前
MySQL————数据库基础
数据库·mysql
程序新视界10 小时前
如何选择合适的数据库?PostgreSQL与MySQL各项对比
数据库·mysql·postgresql
dongchen。12 小时前
MySQL第一次作业
数据库·mysql
重生之我是Java开发战士14 小时前
【MySQL】数据库基础
数据库·mysql
ChuHsiang14 小时前
【剑指MySQL】数据库基础(1)
数据库·mysql
九皇叔叔14 小时前
Docker 镜像维护指南:从配置优化到 MySQL 实战运行
mysql·adb·docker
muxin-始终如一14 小时前
MySQL分区分表实现方法详解
数据库·mysql·adb
奥尔特星云大使14 小时前
mysql高可用架构之MHA部署(三)——故障转移后邮件告警配置(保姆级)
mysql·dba·高可用·mha·邮件告警
disanleya15 小时前
MySQL时间格式转换,时间数据混乱不堪如何彻底重构?
数据库·mysql·重构