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%';如下

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 倍的磁盘读取。
| 归档时间: |
|
| 查看次数: |
1219 次 |
| 最近记录: |