Covering Index Not Being Used Effectively
Using index means that an index was &quot;covering&quot; and was used.  Or, at least, when the EXPLAIN was run, it decided that.
I have looked at thousands of EXPLAINs and slowlog entries.  In theory, they always match.  However, there is nothing that forces the EXPLAIN to actually match what happens and is recorded in the slowlog.
I have seen as many as 6 different EXPLAINs for a given query &quot;digest&quot;.  But that is easily explained by different cardinality, etc.
Could you provide the full, exact, text of the EXPLAIN and the slowlog entry.  I would like to see if I can spot something.  Also, if available, please provide EXPLAIN FORMAT=JSON SELECT ...
Actually, SHOW CREATE TABLE would probably have the clue.
WHERE `hash` = 34605915

If hash is VARCHAR, then this cannot use the index.  Add quotes to the string &quot;34605915&quot;.
Or, if hash is always numeric, then make it an integer datatype, perhaps INT UNSIGNED (32-bit number; 4-bytes).
When mixing char and int, MySQL will convert the varchar to int before comparing.  So, the one case of &quot;varchar_col = integer-constant&quot; cannot use the index effectively.