關於mysql創建索引的一點問題

表連接的字段都需要建索引麼?

現有tab1和tab2 使用sss字段關聯查詢,sss沒有建立索引時查詢全表掃描,在其中一個表種加了一個sss字段的索引另外的表沒有加sss後就走索引了,這裏是需要都創建索引麼??有點迷惑了,還請大師指點迷津

CREATE TABLE `tab1` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `key1` varchar(255) DEFAULT NULL,
  `key2` varchar(11) DEFAULT NULL,
  `key3` varchar(255) DEFAULT NULL,
  `remark` varchar(255) DEFAULT NULL,
  `sss` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_key1` (`key1`,`key2`,`key3`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

CREATE TABLE `tab2` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `sex` varchar(255) DEFAULT NULL,
  `remark` varchar(255) DEFAULT NULL,
  `sss` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_name_sex` (`name`,`sex`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

INSERT INTO `tab1` VALUES (1, '11', '1', '123', '123', NULL);
INSERT INTO `tab1` VALUES (2, '22', '2', '234', '2', NULL);
INSERT INTO `tab1` VALUES (3, '33', '3', '345', '3', NULL);
INSERT INTO `tab2` VALUES (1, '11', '1', '123', '1');
INSERT INTO `tab2` VALUES (2, '22', '2', '234', '2');
INSERT INTO `tab2` VALUES (3, '33', '3', '345', '3');

執行查詢

EXPLAIN
select * from tab1 left join tab2 on tab1.sss = tab2.sss
where tab2.name='11';
#其中一個表種添加sss的索引
ALTER TABLE `ansh_test`.`tab1` 
ADD INDEX `idx_sss`(`sss`) USING BTREE;

結果1

#其中一個表種添加sss的索引
ALTER TABLE `ansh_test`.`tab1` 
ADD INDEX `idx_sss`(`sss`) USING BTREE;
EXPLAIN
select * from tab1 left join tab2 on tab1.sss = tab2.sss
where tab2.name='11';

結果2

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章