[英]improving the count() performance in MySQL
我有一个如下的mysql查询。
SELECT `indexVal`, COUNT(`indexVal`)
FROM `key_word`
WHERE `hashed_word` IN ('001','01v','0ji','0k9','0vc','0@v','0%d','13#' ,'148' ,
'1e1','1sx','1v$','1@c','1?b','1?k','226','2kl','2ue',
'2*l','2?4','36h','3au','3us','4d~')
GROUP BY `indexVal`
此查询需要5秒钟才能生成结果! 我什至还使用ALTER TABLE key_word ADD INDEX (hashed_word, indexVal)
创建了一个复合索引。 请注意,我的查询是计算indexVal
在“搜索”中出现了多少次,而不是在“表”中出现了多少次。
我的表有3列,有2800万条记录,将来的表将有数十亿条记录。 我正在使用InndoDB,我只是选择了它。 下面是我的表Show Create Table
结果
CREATE TABLE `key_word` (
`primary_key` bigint(20) NOT NULL AUTO_INCREMENT,
`indexVal` int(11) NOT NULL,
`hashed_word` char(3) NOT NULL,
PRIMARY KEY (`primary_key`),
KEY `hashed_word` (`hashed_word`,`indexVal`)
) ENGINE=InnoDB AUTO_INCREMENT=28570982 DEFAULT CHARSET=latin1
我用Explain
命令运行了上面的select
查询。 以下是结果
那么我怎样才能加快速度呢? 我希望在1秒以内得到结果。 感谢您的建议。
PS:我不需要结果按任何顺序排列。
尝试使用具有相反顺序的列的索引:
create index xx on key_word( `indexVal`,`hashed_word`);
这可能有助于防止优化程序使用文件排序,
但是我认为这不能帮助将查询速度从5秒提高到不到1秒提高500%。
您可能需要更快的硬件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.