看到很多网上谈优化mysql的文章,发现很多在谈到mysql的null是不走索引的,在此我觉得很有必要纠正下这类结论。
mysql is null是有索引的,而且是很高效的,(版本:mysql5.5)
表结构如下:

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;

测试几条数据:

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,索引效率还是很高的。

 

Mysql is null 索引的更多相关文章

  1. MySQL引擎、索引和优化(li)

    一.存储引擎 存储引擎,MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力.通过选择不同的技术 ...

  2. MySQL(五) MySQL中的索引详讲

    序言 之前写到MySQL对表的增删改查(查询最为重要)后,就感觉MySQL就差不多学完了,没有想继续学下去的心态了,原因可能是由于别人的影响,觉得对于MySQL来说,知道了一些复杂的查询,就够了,但是 ...

  3. mysql优化之索引篇

    对mysql优化是一个综合性的技术,主要包括 a: 表的设计合理化(符合3NF) b: 添加适当索引(index) [四种: 普通索引.主键索引.唯一索引unique.全文索引] c: 分表技术(水平 ...

  4. Mysql 复合键索引性能

    数据库的常见的索引一般是单个字段,如果多个字段的组合,那么就组成了复合索引.对于组合索引,如果 对其中一字段做为条件查询,会出现什么情况呢? 一.例子 mysql> show create ta ...

  5. mysql 强制走索引

    查询是数据库技术中最常用的操作.查询操作的过程比较简单,首先从客户端发出查询的SQL语句,数据库服务端在接收到由客户端发来的SQL语句后, 执行这条SQL语句,然后将查询到的结果返回给客户端.虽然过程 ...

  6. Mysql数据库的索引原理

    写在前面:索引对查询的速度有着至关重要的影响,理解索引也是进行数据库性能调优的起点.考虑如下情况,假设数据库中一个表有10^6条记录,DBMS的页面大小为4K,并存储100条记录.如果没有索引,查询将 ...

  7. 论MySQL何时使用索引,何时不使用索引

    索引: 使用索引可快速访问数据库表中的特定信息.索引是对数据库表中一列或多列的值进行排序的一种结构,例如 employee 表的姓(name)列.如果要按姓查找特定职员,与必须搜索表中的所有行相比,索 ...

  8. 第五章 MySQL事务,视图,索引,备份和恢复

    第五章 MySQL事务,视图,索引,备份和恢复 一.事务 1.什么是事务 事务是一种机制,一个操作序列,它包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求.要么都执行 ...

  9. mysql如何查看索引使用情况以及优化 - guols0612

    mysql中支持hash和btree索引.innodb和myisam只支持btree索引,而memory和heap存储引擎可以支持hash和btree索引 我们可以通过下面语句查询当前索引使用情况: ...

随机推荐

  1. Git生成ssh密钥指定文件

    ssh-keygen 使用的时候可以直接使用 -f 参数 指定密钥保存文件,省去后面生成成功后再提示选择保存文件: ssh-keygen -t rsa -C "abc@example.com ...

  2. NPOI 修改指定单元格字体颜色

    //创建一个字体颜色 IFont font = hssfworkbook.CreateFont(); //红色 font.Color = HSSFColor.Red.Index; //样式 ICell ...

  3. Mesos源码分析(5): Mesos Master的启动之四

      5. Create an instance of allocator.   代码如下   Mesos源码中默认的Allocator,即HierarchicalDRFAllocator的位置在$ME ...

  4. spring的定时器

    一:基于xml配置的方式 1:编写普通的pojo 类 package com.aflyun.web.task; import org.springframework.stereotype.Compon ...

  5. [SQL]LeetCode182. 查找重复的电子邮箱 | Duplicate Emails

    Write a SQL query to find all duplicate emails in a table named Person. +----+---------+ | Id | Emai ...

  6. 构建multipart/form-data实现文件上传

    构建multipart/form-data实现文件上传 通常文件上传都是通过form表单中的file控件,并将form中的content-type设置为multipart/form-data.现在我们 ...

  7. 面试中程序员常见的Redis"刁难"问题,值得一读!

    导读 在程序员面试过程中Redis相关的知识是常被问到的话题.作为一名在互联网技术行业打击过成百上千名的资深技术面试官,总结了面试过程中经常问到的问题.十分值得一读. Redis有哪些数据结构? 字符 ...

  8. Yarn篇--搭建yarn集群

    一.前述 有了上次hadoop集群的搭建,搭建yarn就简单多了.废话不多说,直接来 二.规划 三.配置如下 yarn-site.xml配置 <property>        <n ...

  9. BBS论坛(十七)

    17.首页导航条实现和代码抽离 (1)temlates/common/_head.html <meta name="csrf-token" content="{{ ...

  10. Xcode 命令行工具 Command Line Tools

    xcode命令行工具包是一个小型独立包,可供下载独立于Xcode的和允许您执行命令行开发OS X. 在OS X10.9,就以及没有clt的下载安装包了,需要使用命令在线安装. xcode-select ...