我有一个名为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列都是单独索引的,所以我不明白当我试图通过搜索
indexVal
从hashed_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倍的磁盘读取量。