如何使用具有索引键的 IN 优化 SQL 查询
how to optimize SQL queries using IN having indexed keys
我是运行这个查询
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
没有任何内容 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 有问题。谁能告诉我优化方法?
据我所知,
IN 查询将比单个“=”查询花费更多时间。如果 "IN" 有单个值那么它等于单个“=”查询。
因为是“=”或“=”的MULTIPLE OR条件。
id 将匹配 "IN" 数组中的每 4 个值。
Only way to optimise is to have index.
更新:
如果 Extra 列也显示 Using where
,则表示该索引正用于执行键值查找。如果不使用 where,优化器可能会读取索引以避免读取数据行,但不会将其用于查找。例如,如果索引是查询的覆盖索引,优化器可能会扫描它而不使用它进行查找。参见 explanation
我是运行这个查询
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
没有任何内容 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 有问题。谁能告诉我优化方法?
据我所知,
IN 查询将比单个“=”查询花费更多时间。如果 "IN" 有单个值那么它等于单个“=”查询。
因为是“=”或“=”的MULTIPLE OR条件。
id 将匹配 "IN" 数组中的每 4 个值。
Only way to optimise is to have index.
更新:
如果 Extra 列也显示 Using where
,则表示该索引正用于执行键值查找。如果不使用 where,优化器可能会读取索引以避免读取数据行,但不会将其用于查找。例如,如果索引是查询的覆盖索引,优化器可能会扫描它而不使用它进行查找。参见 explanation