MySQL索引对联合查询的影响

联合查询的主表不走索引,都是全表扫描。无论是inner join还是left join 。
===============================================================
T1表结构
CREATE TABLE `t1` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`c1` varchar(32) DEFAULT NULL,
`c2` varchar(32) DEFAULT NULL,
`c3` varchar(32) DEFAULT NULL,
`c4` varchar(32) DEFAULT NULL,
`c5` varchar(32) DEFAULT NULL,
PRIMARY KEY (`ID`),
KEY `IDX_T_C123` (`c1`,`c2`,`c3`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8mb4;
T1表数据:

===============================================================
T2表结构
CREATE TABLE `t2` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`c1` varchar(32) DEFAULT NULL,
`c2` varchar(32) DEFAULT NULL,
`c3` varchar(32) DEFAULT NULL,
`c4` varchar(32) DEFAULT NULL,
`c5` varchar(32) DEFAULT NULL,
PRIMARY KEY (`ID`),
KEY `IDX_T2_C1` (`c1`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8mb4;
T2表数据

===============================================================
Inner join 语句解析:
select * from t2 inner JOIN t1 on t1.c1 =t2.c1

得出结论:Inner join 表数据量小的在前,且全面扫描。数量大的表,走索引扫描。
(无论t1在前还是t2在前,都一样)

LEFT JOIN 语句解析:
select * from t1 left JOIN t2 on t1.c1 =t2.c1

得出结论:主表全表扫描了。副表走索引。

posted @ 2020-12-06 16:42  je_ck  阅读(336)  评论(0)    收藏  举报