MySQL优化器索引选择迷思。高鹏(八怪)对本文亦有贡献。1. 问题描述群友提出问题,表里有两个列c1、c2,分别为INT、VARCHAR类型,且分别创建了unique key。SQL查询的条件是WHERE c1 = ? AND c2 = ?,用EXPLAIN查看执行计划,发现优化器优先选择了VARCHAR类型的c2列索引。他表示很不理解,难道不应该选择看起来代价更小的INT类型的c1列吗?2. 问题复现创建测试表t1:[root@yejr.run]> CREATE TABLE `t1` (
`c1` int NOT NULL AUTO_INCREMENT,
`c2` int unsigned NOT NULL,
`c3` varchar(20) NOT NULL,
`c4` varchar(20) NOT NULL,
PRIMARY KEY (`c1`),
UNIQUE KEY `k3` (`c3`),
UNIQUE KEY `k2` (`c2`)
) ENGINE=InnoDB;利用mysql_random_data_load写入一万行数据:mysql_random_data_load -h127.0.0.1 -uX -pX yejr t1 10000查看执行计划:[root@yejr.run]> EXPLAIN SELECT * F
...
继续阅读
(15)