网上对联合索引众说纷纭 甚至还看到一些不正确的说法 这次我们就对联合索引实验一番 实验联合索引使用情况开始!!!
CentOS : Linux 7.4 docker : 10.03.14 mysql:5.6与5.7
引擎:innodb 字符集:utf8-mb4 联合索引:abc
CREATE TABLE `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`a` int(11) ,
`b` int(11) ,
`c` int(11) ,
`d` int(11) ,
PRIMARY KEY (`id`) USING BTREE,
INDEX `abc`(`a`, `b`, `c`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin;
mysql5.6 与 mysql 5.7 添加50条相同的数据
INSERT INTO `test`.`test`(`a`, `b`, `c`) VALUES (0, 0, 0);
INSERT INTO `test`.`test`(`a`, `b`, `c`) VALUES (0, 0, 1);
INSERT INTO `test`.`test`(`a`, `b`, `c`) VALUES (0, 1, 0);
INSERT INTO `test`.`test`(`a`, `b`, `c`) VALUES (0, 1, 1);
INSERT INTO `test`.`test`(`a`, `b`, `c`) VALUES (1, 0, 0);
INSERT INTO `test`.`test`(`a`, `b`, `c`) VALUES (1, 0, 1);
INSERT INTO `test`.`test`(`a`, `b`, `c`) VALUES (1, 1, 0);
INSERT INTO `test`.`test`(`a`, `b`, `c`) VALUES (1, 1, 1);
INSERT INTO `test`.`test`(`a`, `b`, `c`, `d`) VALUES (1904, 1987, 6449, 8313);
INSERT INTO `test`.`test`(`a`, `b`, `c`, `d`) VALUES (3865, 7554, 6353, 7892);
INSERT INTO `test`.`test`(`a`, `b`, `c`, `d`) VALUES (7216, 7893, 169, 9990);
INSERT INTO `test`.`test`(`a`, `b`, `c`, `d`) VALUES (127, 9779, 8670, 4161);
INSERT INTO `test`.`test`(`a`, `b`, `c`, `d`) VALUES (8741, 443, 5729, 8132);
INSERT INTO `test`.`test`(`a`, `b`, `c`, `d`) VALUES (4728, 180, 1211, 6401);
INSERT INTO `test`.`test`(`a`, `b`, `c`, `d`) VALUES (275, 2680, 4087, 587);
INSERT INTO `test`.`test`(`a`, `b`, `c`, `d`) VALUES (1947, 9009, 4803, 2921);
INSERT INTO `test`.`test`(`a`, `b`, `c`, `d`) VALUES (7655, 1448, 4663, 7201);
INSERT INTO `test`.`test`(`a`, `b`, `c`, `d`) VALUES (9530, 9692, 1618, 7453);
INSERT INTO `test`.`test`(`a`, `b`, `c`, `d`) VALUES (3614, 2247, 6781, 1583);
INSERT INTO `test`.`test`(`a`, `b`, `c`, `d`) VALUES (958, 7086, 3107, 3542);
INSERT INTO `test`.`test`(`a`, `b`, `c`, `d`) VALUES (6347, 6106, 1241, 1154);
INSERT INTO `test`.`test`(`a`, `b`, `c`, `d`) VALUES (5192, 976, 2482, 2900);
INSERT INTO `test`.`test`(`a`, `b`, `c`, `d`) VALUES (7531, 5631, 9854, 9863);
INSERT INTO `test`.`test`(`a`, `b`, `c`, `d`) VALUES (8104, 7369, 5065, 7238);
INSERT INTO `test`.`test`(`a`, `b`, `c`, `d`) VALUES (8090, 9144, 1397, 5646);
INSERT INTO `test`.`test`(`a`, `b`, `c`, `d`) VALUES (8774, 2017, 678, 7047);
INSERT INTO `test`.`test`(`a`, `b`, `c`, `d`) VALUES (6561, 7918, 6232, 8678);
INSERT INTO `test`.`test`(`a`, `b`, `c`, `d`) VALUES (1858, 7281, 4752, 3060);
INSERT INTO `test`.`test`(`a`, `b`, `c`, `d`) VALUES (1476, 9014, 9090, 9655);
INSERT INTO `test`.`test`(`a`, `b`, `c`, `d`) VALUES (3941, 631, 9218, 1696);
INSERT INTO `test`.`test`(`a`, `b`, `c`, `d`) VALUES (6871, 6124, 6384, 9332);
INSERT INTO `test`.`test`(`a`, `b`, `c`, `d`) VALUES (5506, 6523, 663, 6247);
INSERT INTO `test`.`test`(`a`, `b`, `c`, `d`) VALUES (6683, 7559, 1471, 8354);
INSERT INTO `test`.`test`(`a`, `b`, `c`, `d`) VALUES (3362, 3197, 5540, 8868);
INSERT INTO `test`.`test`(`a`, `b`, `c`, `d`) VALUES (8919, 2003, 3644, 1414);
INSERT INTO `test`.`test`(`a`, `b`, `c`, `d`) VALUES (5605, 2756, 3252, 9957);
INSERT INTO `test`.`test`(`a`, `b`, `c`, `d`) VALUES (6945, 2846, 251, 1999);
INSERT INTO `test`.`test`(`a`, `b`, `c`, `d`) VALUES (9587, 82, 905, 4311);
INSERT INTO `test`.`test`(`a`, `b`, `c`, `d`) VALUES (7096, 503, 5713, 8565);
INSERT INTO `test`.`test`(`a`, `b`, `c`, `d`) VALUES (2596, 4870, 1300, 7896);
INSERT INTO `test`.`test`(`a`, `b`, `c`, `d`) VALUES (2892, 1237, 5257, 6045);
INSERT INTO `test`.`test`(`a`, `b`, `c`, `d`) VALUES (3438, 4154, 5238, 6369);
INSERT INTO `test`.`test`(`a`, `b`, `c`, `d`) VALUES (6110, 6861, 3039, 8884);
INSERT INTO `test`.`test`(`a`, `b`, `c`, `d`) VALUES (1348, 5603, 1165, 449);
INSERT INTO `test`.`test`(`a`, `b`, `c`, `d`) VALUES (9651, 6505, 1433, 7373);
INSERT INTO `test`.`test`(`a`, `b`, `c`, `d`) VALUES (5873, 9505, 5669, 9854);
INSERT INTO `test`.`test`(`a`, `b`, `c`, `d`) VALUES (9121, 1441, 1407, 6596);
INSERT INTO `test`.`test`(`a`, `b`, `c`, `d`) VALUES (5623, 2428, 8643, 6690);
INSERT INTO `test`.`test`(`a`, `b`, `c`, `d`) VALUES (9843, 3299, 3931, 9252);
INSERT INTO `test`.`test`(`a`, `b`, `c`, `d`) VALUES (502, 7955, 2970, 2974);
一个条件:
where条件 | 是否用上索引 | 扫描行数 |
---|---|---|
a = 1 | 是 | 4 |
b = 1 | 否 | 50 |
b = 1 | 否 | 50 |
两个条件:
where条件 | 是否用上索引 | 扫描行数 |
---|---|---|
a = 1 and b = 1 | 是 | 2 |
b = 1 and a = 1 | 是 | 2 |
a = 1 and c = 1 | 是 | 4 |
c = 1 and a = 1 | 是 | 4 |
b = 1 and c = 1 | 否 | 50 |
c = 1 and b = 1 | 否 | 50 |
三个条件:
where条件 | 是否用上索引 | 扫描行数 |
---|---|---|
a = 1 and b = 1 and c = 1 | 是 | 1 |
a = 1 and c = 1 and b = 1 | 是 | 1 |
b = 1 and a = 1 and c = 1 | 是 | 1 |
b = 1 and c = 1 and a = 1 | 是 | 1 |
c = 1 and a = 1 and b = 1 | 是 | 1 |
c = 1 and b = 1 and a = 1 | 是 | 1 |
本文为麦志健原创文章,转载无需和我联系,但请注明来自麦志健博客http://maizhijian.com
最新评论