EXPLAIN 输出表明我的索引没有被使用

Tas*_*eat 11 mysql

我只在 done_status(done_status = INT) 上使用索引设置了我的表:

在此处输入图片说明

当我使用:

EXPLAIN SELECT * FROM reminder  WHERE done_status=2
Run Code Online (Sandbox Code Playgroud)

我得到这个:

id select_type table type possible_keys key key_len ref rows Extra
1 简单提醒 ALL done_status NULL NULL NULL 5 使用 where

但是当我发出这个命令时:

EXPLAIN SELECT * FROM reminder  WHERE done_status=1
Run Code Online (Sandbox Code Playgroud)

我得到以下返回:

id select_type table type possible_keys key key_len ref rows Extra
1 简单提醒 ref done_status done_status 4 const 2   

EXPLAIN表明它使用 5 行,第二次使用 2 行。

我认为没有使用索引,如果我第一次理解它应该给我 3 行。我做错了什么?

SHOW INDEX FROM reminder

Table Non_unique Key_name Seq_in_index Column_name Collat​​ion Cardinality Sub_part Packed Null Index_type Comment Index_comment
提醒 1 done_status 1 done_status A 5 NULL NULL BTREE

解释扩展:

id select_type table type possible_keys key key_len ref 行过滤额外
1 简单提醒 ref done_status done_status 4 const 2 100.00

show warnings 没有表现出任何兴趣。

小智 5

您误解了“行”字段是什么。它是 mysql 估计它需要读取以满足您的查询的行数。该值可能非常不准确。这并不意味着这是结果中的行数 - 或 mysql 读取的实际行数