查询:
select id,
title
from posts
where id in (23,24,60,19,21,32,43,49,9,11,17,34,37,39,46,5
2,55)
解释计划:
mysql> explain select id,title from posts where id in (23,24,60,19,21,32,43,49,9,11,17,34,37,39,46,5
2,55);
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
| 1 | SIMPLE | posts | ALL | PRIMARY | NULL | NULL | NULL | 30 | Using where |
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
1 row in set (0.05 sec)
id是posts表的主键。
答案 0 :(得分:3)
除了添加其他索引,例如
似乎没什么可做的......
事实上,即使有可用的索引, MySQL也可能决定进行表扫描,就像这里的情况一样(“ALL”类型)。原因可能是表可能具有相对较少的行(与查询将返回的估计行数相比),因此更有效地“读取”表,顺序地,丢弃非我们去的时候匹配行,而不是“希望遍布整个地方”,带有索引间接。
答案 1 :(得分:0)
我认为没有任何问题。如果您需要选择列表,那么“IN”是正确的方法。你没有选择不必要的信息,你选择的东西是一个关键,可能是索引。