【发布时间】:2016-05-16 23:24:16
【问题描述】:
表格示例:
id | source | removed
17D30437329A9B9 | | 0
M851X0LG81045F | 17D30437329A9B9 | 0
QQG1RU1M8E5JHO | | 0
QDVHFNFKF0Z80W | 17D30437329A9B9 | 0
8BEFSFGUPBXJHV | | 0
当我查询时:
SELECT *
FROM `uploads`
WHERE (id = '17D30437329A9B9 ' OR `source` = '17D30437329A9B9 ')
AND removed = 0
查询耗时约 25 秒(我有约 1700 万行)。
但是当我运行这个时:
SELECT *
FROM `uploads`
WHERE (id = '17D30437329A9B9 ' OR `source` = '17D30437329A9B9 ')
或者这个:
SELECT *
FROM `uploads`
WHERE (`id` = '17D30437329A9B9 ')
AND removed = 0
或者说:
SELECT *
FROM `uploads`
WHERE (`source` = '17D30437329A9B9 ')
AND removed = 0
查询运行速度很快。
为什么第一个查询运行很慢,我该如何解决?
编辑:
来自EXPLAIN SELECT * FROM uploads WHERE (id = '17D30437329A9B9 ' OR source = '17D30437329A9B9 ') AND removed = 0;的结果:
+----+-------------+---------+------+-------------------------------------------------------+---------+---------+-------+---------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------+------+-------------------------------------------------------+---------+---------+-------+---------+-------------+
| 1 | SIMPLE | uploads | ref | PRIMARY,removed,source,idx_member_selectFiles,id,id_2 | removed | 1 | const | 8829521 | Using where |
+----+-------------+---------+------+-------------------------------------------------------+---------+---------+-------+---------+-------------+
【问题讨论】: