三、避免在where子句中使用 or 来连接条件

简介: 三、避免在where子句中使用 or 来连接条件

1、反例

SELECT * FROM user WHERE id=1 OR salary=5000

2、正例

(1)使用union all

1. SELECT * FROM user WHERE id=1
2. UNION ALL
3. SELECT * FROM user WHERE salary=5000

(2)分开两条sql写

1. SELECT * FROM user WHERE id=1
2. 
3. SELECT * FROM user WHERE salary=5000

3、理由


使用or可能会使索引失效,从而全表扫描;

对于or没有索引的salary这种情况,假设它走了id的索引,但是走到salary查询条件时,它还得全表扫描;

也就是说整个过程需要三步:全表扫描+索引扫描+合并。如果它一开始就走全表扫描,直接一遍扫描就搞定;

虽然mysql是有优化器的,处于效率与成本考虑,遇到or条件,索引还是可能失效的;


目录
相关文章
|
24天前
|
SQL 数据库
数据库sql语句分组
在SQL中,`GROUP BY`语句用于将多行数据根据一个或多个列进行分组,以便可以对每个分组执行聚合函数,如计数、求和、求平均等。以下是一些基本的SQL分组示例。 1. **基本分组**
|
1月前
T-sql 高级查询( 5*函数 联接 分组 子查询)
T-sql 高级查询( 5*函数 联接 分组 子查询)
|
11月前
|
SQL 数据库
SQL中字段跟子查询结果判等,子查询结果为null的处理办法
前言:今天写功能的时候遇到一个问题,SQL中字段跟子查询结果判等,子查询结果为null,查询不到数据
|
1月前
|
SQL 数据库
SQL HAVING 子句详解:在 GROUP BY 中更灵活的条件筛选
HAVING子句被添加到SQL中,因为WHERE关键字不能与聚合函数一起使用。
97 0
|
9月前
数据查询语句:包括SELECT语句、WHERE子句、GROUP BY子句、HAVING子句、ORDER BY子句等,用于从数据表中检索数据。
数据查询语句:包括SELECT语句、WHERE子句、GROUP BY子句、HAVING子句、ORDER BY子句等,用于从数据表中检索数据。
32 1
|
11月前
|
SQL 关系型数据库 数据库
10个高级SQL写法,包括窗口函数、联合查询、交叉查询、递归查询
10个高级SQL写法,包括窗口函数、联合查询、交叉查询、递归查询
177 1
|
11月前
|
Shell
一.条件选择:if语句
一.条件选择:if语句
108 0
|
SQL 关系型数据库 MySQL
避免在where子句中使用 or 来连接条件
避免在where子句中使用 or 来连接条件