【发布时间】:2016-01-05 16:01:26
【问题描述】:
我正在运行这个查询
EXPLAIN SELECT id, timestamp from foo where id IN (23,67,78,90) order by ASC
此处id 已编入索引。但是当我运行Explain 时,我也在Using where;Using Index 中得到这个Extra
+----+-------------+---------------+-------+---------------+---------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------------+-------+---------------+---------+---------+------+------+-------------+
| 1 | SIMPLE | foo | range | PRIMARY | PRIMARY | 8 | NULL | 12 | Using where;Using Index|
+----+-------------+---------------+-------+---------------+---------+---------+------+------+-------------+
但是,当我使用单个 id 运行相同的查询时,Extra 中没有任何内容,它在索引的情况下按预期工作
EXPLAIN SELECT id, timestamp from foo where id = 23`
+----+-------------+---------------+-------+---------------+---------+---------+------+------+-------------+
| id | select_type | table| type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------------+-------+---------------+---------+---------+------+------+-------------+
| 1 | SIMPLE | foo | range | PRIMARY | PRIMARY | 8 | NULL | 1 | |
+----+-------------+---------------+-------+---------------+---------+---------+------+------+-------------+
我认为 IN 有问题。谁能告诉我优化它的方法?
【问题讨论】:
-
我很困惑。您认为查询如何在不使用索引对行进行某种搜索的情况下找到这些行?
-
它说它正在使用索引。这意味着它已经过优化。
-
又添加了一件事......现在到什么程度会影响执行时间?
-
发生了一些奇怪的事情——为什么“范围”只是“id=23”。请提供
SHOW CREATE TABLE。
标签: mysql indexing explain where-in