HiveBrain v1.2.0
Get Started
← Back to all entries
patternsqlMinor

EXPLAIN output suggests that my index is not being used

Submitted by: @import:stackexchange-dba··
0
Viewed 0 times
indexusedsuggestsoutputbeingthatexplainnot

Problem

I have set up my table with an index only on done_status(done_status = INT):

When I use:

EXPLAIN SELECT * FROM reminder  WHERE done_status=2


I get this back:

id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE reminder ALL done_status NULL NULL NULL 5 Using where

But when I issue this command:

EXPLAIN SELECT * FROM reminder  WHERE done_status=1


I get the following returned:

id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE reminder ref done_status done_status 4 const 2

The EXPLAIN shows me that it uses 5 rows, the second time 2 rows.

I don't think the index is used, if I understood it right first time it should give me 3 rows. What do I do wrong?

SHOW INDEX FROM reminder:

Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
reminder 1 done_status 1 done_status A 5 NULL NULL BTREE

explain extended:

id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE reminder ref done_status done_status 4 const 2 100.00

show warnings didn't show anything of interest.

Solution

You misunderstand what the 'rows' field is. It is the number of rows that mysql estimates it shall need to read to satisfy your query. This value can be quite inaccurate. It does not mean this is the number of rows in the result - or the actual number of rows read by mysql

Context

StackExchange Database Administrators Q#8413, answer score: 5

Revisions (0)

No revisions yet.