前言
这里主要是 探究一下 explain $sql 中各个 type
诸如 const, ref, range, index, all 的查询的影响, 以及一个初步的效率的判断
这里会调试源码来看一下 各个类型的查询 需要 lookUp 的记录
以及 相关的差异
此系列文章建议从 mysql const 查询 开始看
测试表结构信息如下
CREATE TABLE `tz_test` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`field1` varchar(12) DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=3333343 DEFAULT CHARSET=utf8
测试数据为序列 1 – 99
all 查询存在的记录
随便查询一个 非索引字段
执行查询如下 “select * from tz_test where field2 = '33';”
在 row_search_mvcc 中增加输出, “printf(”%s”, ((char*)rec+0x11))”
输出情况如下, 可以看到的是 遍历了所有的记录
然后 “field99” 表示的是 field1 字段, 再之后的 “99” 是 field2 字段
第一条记录如下, 这是第一条记录, 然后 会依次遍历整张表的所有的记录
完