【问题标题】:Slow CREATE TABLE with MariaDB engine ColumnStore使用 MariaDB 引擎 ColumnStore 的慢速 CREATE TABLE
【发布时间】:2020-04-18 19:08:15
【问题描述】:
  1. 系统:Ubuntu 18 - SSD
  2. MariaDB 列存储版本:1.2.5
  3. 表格行数:3

对比一下InnoDB在ColumnStore前面的建表操作,InnoDB的运行速度比ColumnStore快X倍。

我已经使用引擎 ColumnStore 执行了一些带有 INSERT AS SELECT 的 CREATE TABLE。结果很慢。这是顺序:

DROP table IF EXISTS example;

CREATE TABLE IF NOT EXISTS example
  (num INT(11),meta DECIMAL(14,4),min INT(11),max INT(11))
ENGINE=columnstore;

INSERT INTO example 
 (num, meta, min, max)
AS SELECT num, meta, min, max FROM old_example;

-- TIME TO EXECUTE
-- On row affected, taking 2.8s

现在,看看我是如何使用 InnoDB 的


DROP table IF EXISTS example;

CREATE TABLE IF NOT EXISTS example
  (num INT(11),meta DECIMAL(14,4),min INT(11),max INT(11))
  (SELECT num, meta, min, max FROM old_example);

-- TIME TO EXECUTE
-- On row affected, taking 103ms

注意 1:我确实知道第一次我又做了一个操作,但情况有所不同,但我做了一个跟踪,将每个查询分开,我发现使用 ENGINE=ColumnStore 的 CREATE TABLE 需要这么长时间。 注意 2:MariaDB 列存储现在有 CREATE AS SELECT operation

鉴于此,这里有一些问题:

问题 1:我可以做一些 MariaDB ColumnStore 配置来使创建表操作然后从另一个表中插入数据更快吗? 问题 2:MariaDB ColumnStore 仅用于选择是否更快?

【问题讨论】:

  • 为什么这很重要?您创建一个表一次,而不是频繁。
  • 这听起来不像是您的代码有问题,所以我不知道您希望我们为您提供什么帮助。请参阅 mariadb.com/kb/en/mariadb-columnstore 获取 ColumnStore 论坛的链接和 MariaDB 的 Jira 系统以报告错误。
  • 首先 maria 服务抓取代码,然后是列存储引擎,然后还有一个全部优化。坚果最耗时的是获得更快的选择和加入,您在创建/插入期间需要一些开销,另请参阅mariadb.com/kb/en/mariadb-columnstore-performance-concepts
  • @Barmar 这对我的申请很重要。这是一个转换数据并在仪表板中显示其结果的工作流。有时,一个工作流程会多次返回 create table

标签: mysql mariadb innodb columnstore


【解决方案1】:

速度差异在意料之中。

根据时间,我怀疑数据集很小。

列存储旨在处理非常大的数据集,因此并未针对小数据集进行优化。

查看列存储的内部结构,您会发现每列都有一些大型结构、压缩和索引。此外,还有许多可能的压缩技术;它可能会仔细研究数据以决定每列使用哪一个。所有这些都是为了 SELECT 的性能,而以牺牲任何其他操作为代价。

您的 InnoDB 表没有索引,没有压缩,而且磁盘占用空间(尽管没有压缩)可能要少得多。 (使用更大的表,InnoDB 会更大。)

列存储有一个利基;为此使用它;不要指望它在所有领域都能与 InnoDB 竞争。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-05
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多