用于“Select”查询的最快的MySQL存储引擎

时间:2014-04-27 10:06:04

标签: mysql sql innodb myisam

我有一个关于&#34的问题;选择哪种存储设备"对于我的数据库表。我有一张包含2800万条记录的表格。我将在创建表格后插入数据,之后,不会进行insert - update - delete操作。决不。仅限select次操作。

我有一个如下的查询

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` 

这计算特定结果在搜索中出现的次数。在InnoDB中,此操作耗时5秒。这太多了,因为我的原始数据集将达到数十亿。

要做这种工作,你推荐哪种MySQL存储?

2 个答案:

答案 0 :(得分:0)

除了存储引擎之外,拥有适当的索引似乎很重要。

在您的情况下,CREATE INDEX idx_1 ON key_word (index_val, hashed_word)应该有所帮助。

如果数据真的永远不会改变,你甚至可以预先计算并缓存其中一些结果。

例如

 CREATE TABLE counts  AS SELECT index_val, hashed_word, count(index_val) 
 FROM key_word
 GROUP BY index_val, hashed_word 

答案 1 :(得分:0)

对于仅SELECT查询,ARCHIVE是最快的存储引擎。 由于它是基于MyISAM的,并且以下建议也适用于MyISAM,不要使用varchar但固定大小的char列,您将获得更好的性能。
当然,如果将数据加载到内存中,则更快,而不是从磁盘读取。

相关问题