### 3.6.7 两个键上搜索
在一个键上使用 [`OR`](https://dev.mysql.com/doc/refman/8.0/en/logical-operators.html#operator_or) 非常好优化, 就像是处理 [`AND`](https://dev.mysql.com/doc/refman/8.0/en/logical-operators.html#operator_and) 一样.
一个棘手的情况是在两个不同的键上使用 [`OR`](https://dev.mysql.com/doc/refman/8.0/en/logical-operators.html#operator_or):
```sql
SELECT field1_index, field2_index FROM test_table
WHERE field1_index = '1' OR field2_index = '1'
```
这种情况优化过. 参阅 [Section 8.2.1.3, “索引合并优化”](https://dev.mysql.com/doc/refman/8.0/en/index-merge-optimization.html).
你还可以使用 [`UNION`](https://dev.mysql.com/doc/refman/8.0/en/union.html) 组合两个单独的 [`SELECT`](https://dev.mysql.com/doc/refman/8.0/en/select.html) 语句的输出解决这个问题. 参阅 [Section 13.2.10.3, “UNION 语法”](https://dev.mysql.com/doc/refman/8.0/en/union.html).
每个 [`SELECT`](https://dev.mysql.com/doc/refman/8.0/en/select.html) 只搜索一个键, 可以优化:
```sql
SELECT field1_index, field2_index
FROM test_table WHERE field1_index = '1'
UNION
SELECT field1_index, field2_index
FROM test_table WHERE field2_index = '1';
```
- 简介
- 前言和法律条款
- 安装和更新 MySQL
- 在 Linux 上安装 MySQL
- 在 Linux 上使用 APT 库安装 MySQL
- 在 Linux 上使用 Docker 部署 MySQL
- 使用 Docker 部署 MySQL 服务器的基本步骤
- 使用 Docker 部署 MySQL 服务器的更多主题
- 教程
- 连接到服务器和从服务器断开
- 输入查询
- 创建和使用数据库
- 创建和选择数据库
- 创建表
- 将数据加载到表中
- 从表中检索数据
- 选择所有数据
- 选择特定行
- 选择指定列
- 行排序
- 日期计算
- 处理 NULL 值
- 模式匹配
- 计算行数
- 使用多个表
- 获取数据库和表的信息
- 在批处理模式使用 mysql
- 常见查询示例
- 列的最大值
- 包含某一行最大值的记录
- 每组中列的最大值
- 拥有某个字段的组间最大值的行
- 使用用户自定义变量
- 使用外键
- 两个键上搜索
- 计算每日访问量
- 使用 AUTO_INCREMENT
- 在 Apache 中使用 MySQL
- MySQL 程序
- MySQL 客户端程序
- mysql — MySQL 命令行客户端
- 优化
- 优化概述
- 优化 SQL 语句
- 优化和索引
- 优化数据库结构
- 优化 InnoDB 表
- 优化 MyISAM 表
- 优化 MEMORY 表
- 理解查询执行计划
- 控制查询优化器
- 缓冲和缓存
- 优化锁操作
- 优化 MySQL 服务器
- 测量性能 (Benchmarking)
- 检查线程信息