Mysql is null 索引

看到不少網上談優化mysql的文章,發現不少在談到mysql的null是不走索引的,在此我以爲頗有必要糾正下這類結論。
mysql is null是有索引的,並且是很高效的,(版本:mysql5.5)
表結構以下:mysql

CREATE TABLE `student` (
  `stu_no` int(2) unsigned zerofill NOT NULL AUTO_INCREMENT COMMENT '學員編號',
  `stu_name` varchar(30) CHARACTER SET utf8 DEFAULT NULL COMMENT '學員姓名',
  `stu_sex` varchar(3) CHARACTER SET utf8 NOT NULL COMMENT '學員性別',
  `stu_age` tinyint(2) unsigned zerofill DEFAULT NULL COMMENT '學員年代',
  `grade` double(5,2) unsigned zerofill DEFAULT NULL COMMENT '成績',
  `class_no` int(2) unsigned zerofill DEFAULT NULL COMMENT '所在班級編號',
  PRIMARY KEY (`stu_no`),
  KEY `class_no` (`class_no`),
  KEY `stu_name` (`stu_name`) COMMENT '學生姓名索引'
) ENGINE=MyISAM AUTO_INCREMENT=13 DEFAULT CHARSET=latin1;

測試幾條數據:sql

INSERT INTO `test`.`student` (`stu_no`, `stu_name`, `stu_sex`, `stu_age`, `grade`, `class_no`) VALUES ('01', '李白', '男', '18', '60.00', '01');
INSERT INTO `test`.`student` (`stu_no`, `stu_name`, `stu_sex`, `stu_age`, `grade`, `class_no`) VALUES ('02', '杜甫', '男', '20', '76.00', '01');
INSERT INTO `test`.`student` (`stu_no`, `stu_name`, `stu_sex`, `stu_age`, `grade`, `class_no`) VALUES ('03', '張飛', '男', '32', '80.00', '02');
INSERT INTO `test`.`student` (`stu_no`, `stu_name`, `stu_sex`, `stu_age`, `grade`, `class_no`) VALUES ('04', '韓信', '男', '26', '98.00', '02');
INSERT INTO `test`.`student` (`stu_no`, `stu_name`, `stu_sex`, `stu_age`, `grade`, `class_no`) VALUES ('05', '了龍', '男', '27', '56.00', '02');
INSERT INTO `test`.`student` (`stu_no`, `stu_name`, `stu_sex`, `stu_age`, `grade`, `class_no`) VALUES ('06', '大喬', '女', '17', '88.00', '01');
INSERT INTO `test`.`student` (`stu_no`, `stu_name`, `stu_sex`, `stu_age`, `grade`, `class_no`) VALUES ('07', '小喬', '女', '16', '96.00', '01');
INSERT INTO `test`.`student` (`stu_no`, `stu_name`, `stu_sex`, `stu_age`, `grade`, `class_no`) VALUES ('08', '小喬', '女', '16', '90.00', '01');
INSERT INTO `test`.`student` (`stu_no`, `stu_name`, `stu_sex`, `stu_age`, `grade`, `class_no`) VALUES ('09', '關哥', '男', '32', '80.00', '02');
INSERT INTO `test`.`student` (`stu_no`, `stu_name`, `stu_sex`, `stu_age`, `grade`, `class_no`) VALUES ('10', '劉備', '男', '36', '98.00', NULL);
INSERT INTO `test`.`student` (`stu_no`, `stu_name`, `stu_sex`, `stu_age`, `grade`, `class_no`) VALUES ('11', '宋江', '男', '37', NULL, NULL);
INSERT INTO `test`.`student` (`stu_no`, `stu_name`, `stu_sex`, `stu_age`, `grade`, `class_no`) VALUES ('12', '李逵', '', '27', NULL, NULL);
INSERT INTO `test`.`student` (`stu_no`, `stu_name`, `stu_sex`, `stu_age`, `grade`, `class_no`) VALUES ('13', NULL, '女', '21', '39.00', '01');

 

能夠看到使用了索引stu_name,ref=const,索引效率仍是很高的。測試

相關文章
相關標籤/搜索