使用 MariaDB 引擎 ColumnStore 的慢速 CREATE TABLE
Posted
技术标签:
【中文标题】使用 MariaDB 引擎 ColumnStore 的慢速 CREATE TABLE【英文标题】:Slow CREATE TABLE with MariaDB engine ColumnStore 【发布时间】:2020-04-18 19:08:15 【问题描述】:-
系统:Ubuntu 18 - SSD
MariaDB 列存储版本:1.2.5
表格行数: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
【参考方案1】:
速度差异在意料之中。
根据时间,我怀疑数据集很小。
列存储旨在处理非常大的数据集,因此并未针对小数据集进行优化。
查看列存储的内部结构,您会发现每列都有一些大型结构、压缩和索引。此外,还有许多可能的压缩技术;它可能会仔细研究数据以决定每列使用哪一个。所有这些都是为了 SELECT 的性能,而以牺牲任何其他操作为代价。
您的 InnoDB 表没有索引,没有压缩,而且磁盘占用空间(尽管没有压缩)可能要少得多。 (使用更大的表,InnoDB 会更大。)
列存储有一个利基;为此使用它;不要指望它在所有领域都能与 InnoDB 竞争。
【讨论】:
以上是关于使用 MariaDB 引擎 ColumnStore 的慢速 CREATE TABLE的主要内容,如果未能解决你的问题,请参考以下文章
MariaDB Community Server 10.5 Alpha 上的 MariaDB Columnstore 1.4