patternsqlMinor
EXPLAIN output suggests that my index is not being used
Viewed 0 times
indexusedsuggestsoutputbeingthatexplainnot
Problem
I have set up my table with an index only on done_status(done_status = INT):
When I use:
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:
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
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?
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
When I use:
EXPLAIN SELECT * FROM reminder WHERE done_status=2I 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=1I 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.