Mysql 系列文章主页

===============

1 数据准备

1.1 建表

DROP TABLE IF EXISTS staff;
CREATE TABLE IF NOT EXISTS staff (
id INT PRIMARY KEY auto_increment,
name VARCHAR(50) NOT NULL,
age INT,
pos VARCHAR(50) COMMENT '职位',
salary DECIMAL(10,2)
);

注意:name 字段上加了 NOT NULL 限制

1.2 插入数据

INSERT INTO staff(name, age, pos, salary) VALUES('Alice', 22, 'HR', 5000);
INSERT INTO staff(name, age, pos, salary) VALUES('Bob', 22, 'RD', 10000);

2 测试&Explain分析

2.1 建立索引

CREATE INDEX idx_nameAgePos ON staff(name, age, pos);

2.2 测试

Case#1:索引生效

EXPLAIN SELECT * FROM staff WHERE name = 'Alice';

分析:name 等于一个常量,当然能够使用索引

Case#2:索引失效(IS NULL)

EXPLAIN SELECT * FROM staff WHERE name IS NULL;

分析:建表语句中明确表明 name 字段 NOT NULL,所以,此处的查询是不可能的

Case#3:索引失效(IS NOT NULL)

EXPLAIN SELECT * FROM staff WHERE name IS NOT NULL;

分析:建表语句中明确表明 name 字段 NOT NULL,而此处的查询条件为 WHERE name IS NOT NULL,等价于不加这个条件,于是,查询等价于 SELECT * FROM staff,所以,全表扫描、不能使用索引

3 结论

对于已经有 NOT NULL 修饰的字段来说,不要再使用 IS NULL 或者 IS NOT NULL 来作为查询条件,没有意义。

最新文章

  1. css判断不同分辨率显示不同宽度布局实现自适应宽度
  2. 第七章 LED将为我们闪烁:控制发光二极管
  3. android 打包错误
  4. 3D语音天气球(源码分享)——通过天气服务动态创建3D球
  5. 根据username查找user
  6. MongoDB数据库的主从配对与迁移示例
  7. schedule和scheduleAtFixedRate区别
  8. mysql官方示例数据库
  9. 解决ubuntu 14.04 下eclipse 3.7.2 不能启动,报Could not detect registered XULRunner to use 或 org.eclipse.swt.SWTError: XPCOM 等问题的处理
  10. LM393,LM741可以用作电压跟随器吗?
  11. C# 知识点记录(持续更新中)
  12. 小试 Ninja
  13. Java类加载器详解
  14. c语言文件分割与合并
  15. 【webpack系列】从零搭建 webpack4+react 脚手架(一)
  16. apache提示make_sock?
  17. 基于vue框架手写一个notify插件,实现通知功能
  18. Oracle实体化视图
  19. 图的深度优先遍历(DFS)和广度优先遍历(BFS)
  20. kafka服务无法启动的原因

热门文章

  1. 前端基础之html-Day12
  2. Spring知识点回顾(07)事件发布和监听
  3. .NET:持续进化的统一开发平台
  4. 网络配置及shell基础
  5. mysql安装及常见问题
  6. [翻译] Tensorflow模型的保存与恢复
  7. jacascript 函数参数与 arguments 对象
  8. CF 472 div1 D. Contact ATC
  9. VueJs(2)---VueJs开发环境的搭建和讲解index.html如何被渲染
  10. 用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- Demo分析