千家信息网

这两个小技巧,让SQL语言避开采坑并提高几倍效率

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,原文: https://www.enmotech.com/web/detail/1/837/1.html本次来讲解与 SQL 查询有关的两个小知识点,掌握这些知识点,能够让你避免踩坑以及提高查询效率。
千家信息网最后更新 2026年11月01日这两个小技巧,让SQL语言避开采坑并提高几倍效率


原文: https://www.enmotech.com/web/detail/1/837/1.html

本次来讲解与 SQL 查询有关的两个小知识点,掌握这些知识点,能够让你避免踩坑以及提高查询效率。

1. 允许字段的值为 null,往往会引发灾难

首先,先准备点数据,后面好演示

create table animal(
id int,
name char(20),
index(id)
)engine=innodb;

index(id) 表示给 id 这个字段创建索引,并且 id 和 name 都允许为 null。

接着插入4条数据,其中最后一条数据的 id 为。

insert into animal(id, name) values(1, '猫');
insert into animal(id, name) values(2, '狗');
insert into animal(id, name) values(3, '猪');
insert into animal(id, name) values(null, '无名动物');

此时表中的数据为

这时我们查询表中 id != 1 的动物有哪些

select * from animal where id != 1;

结果如下:

此时我们只找到了两行数据,按道理应该是三行的,但是 id = null 的这一行居然没有被匹配到,,可能大家听说过,null 与任何其他值都不相等,按道理 null != 1 是成立的话,然而现实很残酷,它就是不会被匹配到。

所以,坚决不允许字段的值为 null,否则可能会出现与预期不符合的结果。
反正我之前有踩过这个坑,不知道大家踩过木有?
但是万一有人设置了允许为 null 值怎么办?如果真的这样的话,对于 != 的查找,后面可以多加一个 or id is null 的子句(注意,是 is null,不是 = null,因为 id = null 也不会匹配到值为 null 的行)。即

select * from animal where id != 1 or id is null;

结果如下:

2. 尽可能用 union 来代替 or

(1)、刚才我们给 id 这个字段建立了索引,如果我们来进行等值操作的话,一般会走索引操作,不信你看:

explain select * from animal where id = 1;

结果如下:

通过执行计划可以看见,id 上的等值查找能够走索引查询(估计在你的意料之中),其中

type = ref :表示走非唯一索引
rows = 1 :预测扫描一行

(2)、那 id is null 会走索引吗?答是会的,如图

explain select * from animal where id is null;

其中
type = ref :表示走非唯一索引
rows = 1 :预测扫描一行

(3)、那么问题来了,那如果我们要找出 id = 1 或者 id = null 的动物,我们可能会用 or 语句来连接,即

select * from animal where id = 1 or id is null;

那么这条语句会走索引吗?

有没有走索引,看执行计划就知道了,如图

explain select * from animal where id = 1 or id is null;


其中:

ref = ALL:表示全表扫描

rows = 4 :预测扫描4行(而我们整个表就只有4行记录)
通过执行计划可以看出,使用 or 是很有可能不走索引的,这将会大大降低查询的速率,所以一般不建议使用 or 子句来连接条件。

那么该如何解决?

其实可以用 union 来取代 or,即如下:

select * from animal where id = 1 union select * from animal where id is null.

此时就会分别走两次索引,找出所有 id = 1 和 所有 id = null 的行,然后再用一个临时表来存放最终的结果,最后再扫描临时表。



想了解更多关于数据库、云技术的内容吗?

快来关注"数据和云"公众号、"云和恩墨"官方网站,我们期待与大家一同学习和进步!




索引 数据 结果 查询 字段 一行 动物 子句 知识 知识点 语句 如图 非唯 两个 效率 残酷 这样的话 之中 公众 内容 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 河南云网互联网络科技有限公司 互联网的科技 互联网科技保险 科技与互联网 互联网 的科技创新 狮子座互联网科技培训 华脉科技工业互联网产品 深圳前海聚择互联网科技有限公司 北京华百购互联网科技有限公司 健康食品互联网创新科技园项目 民营互联网公司国防科技 江苏苏星互联网科技有限公司 互联网领先科技宣传片 张召忠谈中国互联网科技 东营紫格互联网科技 吉林省码上互联网科技电话 米泉互联网科技专业怎么样 安徽零酒互联网科技有限公司 互联网的黑科技实验室 颐高云石互联网科技 咖啡豆 北京互联网科技 壕鑫互联网络科技 语蝶互联网科技有限公司 中国航天科技大学国际工业互联网 千方科技属于互联网企业吗 济南有互联网科技公司吗 国大互联网教育科技有限公司薪资 元气玛特互联网科技公司是外包吗 黑云互联网科技有限公司
0