在某些情况下,OR 条件可以避免全表扫描。
1.如果where语句中有or条件,表可以使用索引,但不能。
1) 表:
如果不是`a`则表(
`id` int(1) NOT NULL,
`uid` int(11) NOT NULL,
`aNum` char(20) NULL,
密钥(`id`),
关键`uid`(`uid`)
) = = =6;
mysql> * from a where id=1 or uid=2;
+----+-------------+------+----------------+-------- - ------+-------------+---------+------+------+---- - ----------------------------------+
| 编号 | | 表| 类型 | | 关键| | 参考| 行 | 额外 |
+----+-------------+------+----------------+-------- - ------+-------------+---------+------+------+---- - ----------------------------------+
| 1 | | 一个 | | ,uid | ,uid | 4,4 | 空 | 2 | 使用 union(,uid); 使用地点 |
+----+-------------+------+----------------+-------- - ------+-------------+---------+------+------+---- - ----------------------------------+
一组 1 行(0.00 秒)
2)表:
如果不是`a`则表(
`id` int(1) NOT NULL,
`uid` int(11) NOT NULL,
`aNum` char(20) NULL,
密钥(`id`),
关键`uid`(`uid`)
) = = =6;
mysql> * from a where id=1 or uid=2;
+----+-------------+------+------+---------------- +-- ----+---------+-----+------+-------------+
| 编号 | | 表| 类型 | | 关键| | 参考| 行 | 额外 |
+----+-------------+------+------+---------------- +-- ----+---------+-----+------+-------------+
| 1 | | 一个 | 全部 | ,uid | 空 | 空 | 空 | 5 | 使用地点 |
+----+-------------+------+------+---------------- +-- ----+---------+-----+------+-------------+
一组 1 行(0.00 秒)
2.所有或条件必须是独立索引:
+------+-------------------------------------------------------- -------------------------------------------------- --------------------------
| 表| 桌子
+------+-------------------------------------------------------- -------------------------------------------------- --------------------------
| 一个 | 表 `a` (
`id` int(1) NOT NULL,
`uid` int(11) NOT NULL,
`aNum` char(20) NULL,
密钥(`id`)
) = =6 = |
+------+---------------------------------------- -------------------------------------------------- --------------------------
一组 1 行(0.00 秒)