前言
这里来看一下 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;" 结果如下
完