MySQL:从特定列中选择值非常慢

Pea*_*Gen 7 mysql performance select innodb where-clause

我有一个名为mysql的数据库key_word.它有3列,2300万行.

请查看以下查询.

SELECT `indexVal` FROM `key_word` WHERE `hashed_word`='001'
Run Code Online (Sandbox Code Playgroud)

此查询大约需要6秒钟才能显示结果.结果包含169669行.这非常慢.但是,我注意到,如果我试图获取记录,这只会"发生" indexVal.以下所有查询都非常快.

SELECT `primary_key` FROM `key_word` WHERE `hashed_word`='001'
SELECT `hashed_word` FROM `key_word` WHERE `indexVal`=0
Run Code Online (Sandbox Code Playgroud)

所有这三列都是分开索引的,所以当我试图indexVal通过搜索获取数据时,我不明白为什么它很慢hashed_word

下面是我的表格结构.

在此输入图像描述

以下是有关该表的更多信息

在此输入图像描述

那么,为什么这个从indexVal搜索中选择的hashed_word速度很慢?我怎么解决这个问题?

UPDATE

根据要求,我发布了结果

EXPLAIN SELECT `indexVal` FROM `key_word` WHERE `hashed_word`='001'
Run Code Online (Sandbox Code Playgroud)

下面

在此输入图像描述

UPDATE

结果SHOW VARIABLES LIKE '%query_cache_size%'; SHOW VARIABLES LIKE '%query_cache_type%';如下

在此输入图像描述

Max*_*sky 3

SELECT primary_key FROM key_word WHERE hashed_word='001'比 InnoDB 更快,SELECT indexVal FROM key_word WHERE hashed_word='001'因为主键值总是包含在任何二级索引中;这意味着primary_key是从索引中读取的。然而,在第二个查询中,MySQL 首先从索引中读取主键,然后从表行中读取 indexVal 的值。换句话说,它可以进行 2 倍的磁盘读取。