【问题标题】:Creating temporary table from TokuDB query too slow从 TokuDB 查询创建临时表太慢
【发布时间】:2014-08-03 18:36:06
【问题描述】:

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

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 小时内执行查询……使用 MyISAM 的服务器在 22 分钟内。

使用 TokuDB 的查询显示“查询了大约 38230000 行,提取了大约 303929 行,仍在加载数据”状态。

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

服务器使用的是 MariaDB 5.5.38 服务器

【问题讨论】:

    标签: mysql database-performance myisam mariadb tokudb


    【解决方案1】:

    TokuDB 目前没有在此语句中使用它的批量获取算法,如 https://github.com/Tokutek/tokudb-engine/issues/143 中所述。我添加了一个指向此页面的链接,因此它被视为即将开展的工作的一部分。

    【讨论】:

    • 感谢您的回答...我可以在哪里知道 Tokutek 是否正在研究它或者是否有任何替代解决方案可用?
    • 您将通过我提供的链接看到进度。一种解决方法是将数据导出到平面文件并使用“LOAD DATA INFILE ...”加载它,我只建议在表很大的情况下使用它。我很好奇你为什么要把这么多行放到一个临时表中。
    • 是一个为报告提取信息的存储过程。我正在测试 TokuDB,因为我正在考虑将所有数据库更改为 TokuDB(一个 100GB 数据库)并且一切都运行得非常好而且速度更快,但是这份报告。
    • 正如我在tokutek.atlassian.net/browse/DB-379 中看到的,该问题已在下一个 7.5.0 版本中得到修复,有人知道这个版本什么时候可以在 mariadb 中发布?
    • 我假设您的意思是 MariaDB 10.x。不确定他们什么时候打算从 TokuDB 中分一杯羹,你应该在他们的 IRC 频道或他们的开发邮件列表中询问他们。
    猜你喜欢
    • 2022-11-22
    • 2012-03-24
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 2014-04-30
    • 2013-07-10
    相关资源
    最近更新 更多