我有一个名为key_word的mysql数据库。它有3列,2300万行。
请看下面的查询。

SELECT `indexVal` FROM `key_word` WHERE `hashed_word`='001'

这个查询需要大约6秒的时间来显示结果。结果包含169669行。这是非常缓慢的。但是,我注意到,只有当我试图在indexVal中获取记录时,才会发生这种情况。下面所有的查询都很快。
SELECT `primary_key` FROM `key_word` WHERE `hashed_word`='001'
SELECT `hashed_word` FROM `key_word` WHERE `indexVal`=0

所有这3列都是单独索引的,所以我不明白当我试图通过搜索indexValhashed_word获取数据时为什么速度慢。
下面是我的桌子结构。
下面是有关该表的更多信息
那么,为什么从indexVal中选择而从hashed_word中搜索比较慢?我该怎么解决?
更新
根据要求,我将公布
EXPLAIN SELECT `indexVal` FROM `key_word` WHERE `hashed_word`='001'

在下面
更新
SHOW VARIABLES LIKE '%query_cache_size%'; SHOW VARIABLES LIKE '%query_cache_type%';的结果如下

最佳答案

SELECT primary_key FROM key_word WHERE hashed_word='001'SELECT indexVal FROM key_word WHERE hashed_word='001'快,因为在innodb中,主键值总是包含在任何二级索引中;这意味着从索引中读取主键。但是,在第二个查询中,mysql首先从索引中读取主键,而不是从表行中读取indexval的值。换句话说,它有2倍的磁盘读取量。

08-27 07:48