原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11609103.html
创建一个测试表
1 CREATE TABLE `test` ( 2 `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 3 `a` varchar(32) NOT NULL, 4 `b` varchar(32) NOT NULL, 5 `c` varchar(64) NOT NULL, 6 `d` varchar(128) NOT NULL, 7 `e` varchar(256) NOT NULL, 8 `create_time` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), 9 `update_time` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), 10 PRIMARY KEY (`id`) 11 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
插入数据
1 INSERT INTO `test` (`a`, `b`, `c`, `d`, `e`) VALUES('a', 'b', 'c', 'd', 'e'); 2 INSERT INTO `test` (`a`, `b`, `c`, `d`, `e`) VALUES('a', 'b', 'c', 'd', 'e'); 3 INSERT INTO `test` (`a`, `b`, `c`, `d`, `e`) VALUES('a', 'b', 'c', 'd', 'e'); 4 INSERT INTO `test` (`a`, `b`, `c`, `d`, `e`) VALUES('a', 'b', 'c', 'd', 'e'); 5 INSERT INTO `test` (`a`, `b`, `c`, `d`, `e`) VALUES('a', 'b', 'c', 'd', 'e'); 6 INSERT INTO `test` (`a`, `b`, `c`, `d`, `e`) VALUES('a', 'b', 'c', 'd', 'e'); 7 INSERT INTO `test` (`a`, `b`, `c`, `d`, `e`) VALUES('a', 'b', 'c', 'd', 'e'); 8 INSERT INTO `test` (`a`, `b`, `c`, `d`, `e`) VALUES('a', 'b', 'c', 'd', 'e'); 9 INSERT INTO `test` (`a`, `b`, `c`, `d`, `e`) VALUES('a', 'b', 'c', 'd', 'e'); 10 INSERT INTO `test` (`a`, `b`, `c`, `d`, `e`) VALUES('a', 'b', 'c', 'd', 'e');
查看索引
1 show index from test;
查看执行计划
1 explain select * from test where id = "1";
1 explain select * from test where a = "1";
1 explain select * from test where b = "1";
1 explain select * from test where a = "1" and b = "1";
创建索引(a和b的联合索引)
1 create index idx_a_b on test(a, b);
查看索引
1 show index from test;
查看执行计划
1 explain select * from test where a = "1";
1 explain select * from test where b = "1";
1 explain select * from test where a = "1" and b = "1";
创建索引(b的索引)
1 create index idx_b on test(b);
查看索引
1 show index from test;
查看执行计划
1 explain select * from test where a = "1";
1 explain select * from test where b = "1";
1 explain select * from test where a = "1" and b = "1";
删除索引
1 drop index idx_a_b on test; 2 drop index idx_b on test;
删除索引后,创建a, b, c 3个字段的联合索引
1 create index idx_a_b_c on test(a, b, c);
查看如下语句的执行计划
1 -- ref 2 explain select * from test where a = "1"; 3 -- all 扫全表 4 explain select * from test where b = "1"; 5 -- all 扫全表 6 explain select * from test where c = "1"; 7 -- ref 8 explain select * from test where a = "1" and b = "1" and c = "1"; 9 -- ref 10 explain select * from test where a = "1" and b = "1"; 11 -- ref 12 explain select * from test where a = "1" and c = "1" 13 -- all 扫全表 14 explain select * from test where b = "1" and c = "1"