I have a mysql database called key_word
. It has 3 columns, 23 million rows.
Please have a look at the below query.
SELECT `indexVal` FROM `key_word` WHERE `hashed_word`='001'
This query takes around 6 seconds to display me the result. Result contains 169669 rows. This is very very slow. However, I have noticed that this occurs "only" if I trying to get records in indexVal
. All the below queries are very fast.
SELECT `primary_key` FROM `key_word` WHERE `hashed_word`='001'
SELECT `hashed_word` FROM `key_word` WHERE `indexVal`=0
All these 3 columns are indexed separatly, so I don't understand why it is slow when I am trying to get data from indexVal
by searching hashed_word
Below is my Table structure.
Below is some more information about the table
So, why this selecting from indexVal
while searching from hashed_word
is slow? How can I solve this?
UPDATE
As requested, I am posting the result of
EXPLAIN SELECT `indexVal` FROM `key_word` WHERE `hashed_word`='001'
below
UPDATE
The result of SHOW VARIABLES LIKE '%query_cache_size%'; SHOW VARIABLES LIKE '%query_cache_type%';
is below
SELECT primary_key FROM key_word WHERE hashed_word='001'
is faster than SELECT indexVal FROM key_word WHERE hashed_word='001'
because in InnoDB the primary key value is always included in any secondary index; this means that primary_key is read from the index. In the second query however, MySQL first reads the primary key from the index, than it reads the value of indexVal from the table row. In other words it persoms 2x disk reads.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With