MySQL:从特定列中选择值非常慢
我有一个叫做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列都是分开索引的,所以我不明白为什么它很慢,当我试图通过搜索hashed_word
从indexVal
获取数据时
以下是我的表结构。
以下是有关表格的更多信息
那么,为什么从indexVal
搜索时从hashed_word
中选择的速度很慢? 我该如何解决这个问题?
UPDATE
根据要求,我发布了结果
EXPLAIN SELECT `indexVal` FROM `key_word` WHERE `hashed_word`='001'
下面
UPDATE
SHOW VARIABLES LIKE '%query_cache_size%'; SHOW VARIABLES LIKE '%query_cache_type%';
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中,主键值始终包含在任何二级索引中; 这意味着primary_key是从索引中读取的。 然而,在第二个查询中,MySQL首先从索引读取主键,而不是从表格行读取indexVal的值。 换句话说,它持续2倍的磁盘读取。
您可以尝试通过hashed_word
和indexVal
( indexVal
顺序)进行索引。
该索引对于基于hashed_word
的标准进行选择将很快,并且该索引在索引数据中包含indexVal
,因此不需要从磁盘读取数据。
上一篇: MySQL : Selecting values from a specific column is very slow