从TokuDB查询创建临时表太慢了

时间:2014-06-13 08:50:03

标签: mysql database-performance myisam mariadb tokudb

我在一台服务器上有这个表:

CREATE TABLE `mh` (
  `M` char(13) NOT NULL DEFAULT '',
  `F` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `D` char(6) DEFAULT NULL,
  `A` int(11) DEFAULT NULL,
  `DC` char(13) DEFAULT NULL,
  `S` char(22) DEFAULT NULL,
  `S0` int(11) DEFAULT NULL,
  PRIMARY KEY (`F`,`M`),
  KEY `IDX_S` (`S`),
  KEY `IDX_M` (`M`),
  KEY `IDX_A` (`M`,`A`)
) ENGINE=TokuDB DEFAULT CHARSET=latin1;

同一张表,但在另一台类似的服务器中使用MyISAM引擎。

执行此查询时:

CREATE TEMPORARY TABLE temp
(S VARCHAR(22) PRIMARY KEY)
AS
(
    SELECT S, COUNT(S) AS HowManyS
    FROM mh
    WHERE A = 1 AND S IS NOT NULL
    GROUP BY S
);

该表有1.2亿行。使用TokuDB的服务器在3小时内执行查询...服务器在22分钟内使用MyISAM。

使用TokuDB的查询显示"查询约38230000行,提取约303929行,加载数据仍然是"状态。

为什么TokuDB查询持续时间需要这么长时间? TokuDB是一个非常好的引擎,但我不知道我在这个查询中做错了什么

服务器正在使用MariaDB 5.5.38服务器

1 个答案:

答案 0 :(得分:2)

https://github.com/Tokutek/tokudb-engine/issues/143所述,TokuDB当前没有在此语句中使用它的批量获取算法。我已经添加了此页面的链接,因此它被视为即将到来的努力的一部分。