索引法则--IS NULL, IS NOT NULL 也无法使用索引
2024-10-11 05:19:05
===============
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 来作为查询条件,没有意义。
最新文章
- css判断不同分辨率显示不同宽度布局实现自适应宽度
- 第七章 LED将为我们闪烁:控制发光二极管
- android 打包错误
- 3D语音天气球(源码分享)——通过天气服务动态创建3D球
- 根据username查找user
- MongoDB数据库的主从配对与迁移示例
- schedule和scheduleAtFixedRate区别
- mysql官方示例数据库
- 解决ubuntu 14.04 下eclipse 3.7.2 不能启动,报Could not detect registered XULRunner to use 或 org.eclipse.swt.SWTError: XPCOM 等问题的处理
- LM393,LM741可以用作电压跟随器吗?
- C# 知识点记录(持续更新中)
- 小试 Ninja
- Java类加载器详解
- c语言文件分割与合并
- 【webpack系列】从零搭建 webpack4+react 脚手架(一)
- apache提示make_sock?
- 基于vue框架手写一个notify插件,实现通知功能
- Oracle实体化视图
- 图的深度优先遍历(DFS)和广度优先遍历(BFS)
- kafka服务无法启动的原因
热门文章
- 前端基础之html-Day12
- Spring知识点回顾(07)事件发布和监听
- .NET:持续进化的统一开发平台
- 网络配置及shell基础
- mysql安装及常见问题
- [翻译] Tensorflow模型的保存与恢复
- jacascript 函数参数与 arguments 对象
- CF 472 div1 D. Contact ATC
- VueJs(2)---VueJs开发环境的搭建和讲解index.html如何被渲染
- 用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- Demo分析