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_wordindexVal获取数据时

以下是我的表结构。

在这里输入图像描述

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

那么,为什么从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_wordindexValindexVal顺序)进行索引。

该索引对于基于hashed_word的标准进行选择将很快,并且该索引在索引数据中包含indexVal ,因此不需要从磁盘读取数据。

链接地址: http://www.djcxy.com/p/78749.html

上一篇: MySQL : Selecting values from a specific column is very slow

下一篇: How partitioning works in Hazelcast?