问题标签 [columnstore]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1036 浏览

sql-server - 非聚集列存储索引和主/外键

文档说我们不能在主键或外键列中创建非聚集列存储索引

https://docs.microsoft.com/en-us/sql/t-sql/statements/create-columnstore-index-transact-sql

“具有非聚集列存储索引的表可以具有唯一约束、主键约束或外键约束,但这些约束不能包含在非聚集列存储索引中。”

但在我的测试中,它正在工作:

我在这里想念什么?文档是否正确?

这是我的 SQL Server 版本

Microsoft SQL Server 2016 (SP1-CU4) (KB4024305) - 13.0.4446.0 (X64) 2017 年 7 月 16 日 18:08:49 版权所有 (c) Microsoft Corporation Developer Edition

问候

0 投票
1 回答
103 浏览

sql-server - 为什么必须扫描时索引设置能够影响查询成本

我正在回顾性能调整研究和 AdventureWorks2012 练习。
我从 Product 表中构建了 4 个副本,然后使用以下索引进行设置。

然后我使用以下查询执行执行计划。

我预计它们四个的性能应该相同,因为它们都需要扫描。另外,我只选择ProductID列并且没有WHERE条件。
然而,事实证明是

在此处输入图像描述

为什么聚集索引比非聚集索引贵?
为什么非聚集索引在这种情况下会降低成本?
为什么列存储使 query4 的成本高于 query3?

0 投票
1 回答
389 浏览

sql-server - 列存储行组几行

我有一个有 ~43M 行的表。出于内部目的,我们需要在此表上创建一个聚集列存储索引。为此,我们使用以下命令。

但是,由于某种原因,行组太小,如下图所示。

在此处输入图像描述

这可能是什么原因?据我所知,行组的最小大小是 102,400 行,因此我不明白这些行组为什么那么小。

总共775 row groups为该表创建了。


更新 #1 - 检查sys.dm_db_column_store_row_group_physical_stats统计数据,修剪原因主要是由DICTIONARY_SIZE. 如何处理这种情况?

0 投票
1 回答
769 浏览

sql-server - 当列存储表在同一数据库中时更改分区函数和方案

我有一个每周分区的表,并定义了分区函数和方案。最重要的是该表具有具有相同每周分区方案的聚集列存储索引。

所以现在我必须在分区函数和方案中添加更多范围。失败并显示“无法更改具有非空分区的分区功能......”的错误,其中数据文件只有 4KB,没有加载数据。

从 2014 Ssms 的一篇帖子中,我了解到我们需要禁用聚集索引并更改分区方案并再次启用。

请帮助解决这个问题。我正在使用 2016 sql 和企业版。提前致谢。

0 投票
1 回答
943 浏览

sql-server - Azure SQL DW 行存储与列存储

我在 Azure SQL 数据仓库中有超过 5 亿条记录。我正在尝试做一些基准测试,以了解以何种方式保存记录。行存储或列存储。我不会将表与其他表连接起来,它不是分析事实表。两个表都以循环方式分发,并且都包含 17 个分区。它们都有 45 列。当我查询对两列求和时,我希望 Columnstore 表的性能比 rowstore 好得多,但实际情况是,我从 Rowstore 大约 2.5 分钟和 columnstore 大约 10 分钟得到求和结果。我不使用任何过滤器或分组依据。另一方面,当我查询 count(*) 时,柱状表的性能比行存储要好得多。

编辑

虽然我不能与你分享所有细节,因为它是私人的,这里有一些只是为了了解发生了什么。我在 smallrc 和 100DWU 上运行查询。表加载了一个 CTAS 并包含来自多个表的预连接信息,并将通过我们内部应用程序的自定义定义协议(排序/组/过滤器/分页)提供查询服务。该域是赌博的,从 45 列中,我们有 43 列可以用作过滤器。输出集通常包含 3 到 4 列加上两个总和列,每个查询不超过 1000 行。我假设每个月都有一个新分区,我通过 EventDate 每月对两个表进行分区。大多数情况下,我的查询包含 EventDate 作为过滤器。除了与列存储相同的分区外,我的 Rowstroe 表还包含 EventDate 作为聚集索引。添加 EventDate 作为列存储的二级索引带来了一些改进,但性能仍远远落后于行存储。EventDate 为 int 格式,值模式为 yyyyMMdd (20180101)。

0 投票
1 回答
2251 浏览

mariadb - 表大小 - MariaDB 列存储与 InnoDB

我在 MariaDB 的 ColumnStore 上找到的每项分析都声称它使用的磁盘空间比 InnoDB 等常规引擎少,例如:https ://www.percona.com/blog/2017/03/17/column-store-database-benchmarks-mariadb -columnstore-vs-clickhouse-vs-apache-spark/

但这不是我在测试中发现的

将值为 0 的 100 万行(5 列)插入表中:

columnstore 表的大小比 innoDB 表大:

此外,如果我在不压缩的情况下创建表,则大小是相同的:

我正在使用 mariadb-columnstore-1.1.2-1 版本

我的.ini 文件:

这是预期的行为还是我做错了什么?

0 投票
1 回答
226 浏览

mysql - MariaDB ColumnStore:按计算值过滤子查询

我有一个表,对于给定的(time, country, asn)元组,它存储了几个指标:

在一般使用期间,我将这些指标中的每一个标准化为 0 到 100 之间的值,然后返回最大值,以便粗略估计该国家与 ASN 的连接“有多好”:

有时我可能会通过使用reqs(对该国家/地区的请求数+ASN)列进行加权来执行加权平均:

此查询完美运行。但是,当我尝试在子查询中使用它时,我遇到了一个问题。

我的目标是找出有多少国家的“平均质量”低于某个阈值:

这引发了错误:

我可以毫无问题地执行更简单的子查询。为什么这个失败,我该如何解决?

我正在使用 MariaDB,并且该metrics表使用 ColumnStore 引擎。

快速更新

当我WHERE t1.avg_quality < 50WHERE country = "US"查询替换时执行没有问题。所以执行子查询或过滤没有问题。严格来说,当我尝试过滤计算列时它会失败。

0 投票
2 回答
607 浏览

sql-server - Visual Studio 2017 中的 SSDT 和 ColumnStore 索引

在 SSDT 中,我有一个表和列存储索引定义为:

这两个创建“索引”命令似乎不正确,还有,为什么它引用了一列?

0 投票
0 回答
112 浏览

indexing - 带有 Top 子句的 SQL Server 2016 聚集列存储索引

我试图从具有聚集列存储索引的表中选择前 N行在 sql server 2016 中返回数据需要更多时间(超过一分钟)。

当我删除 Top 并说select * from data 在不到 5 秒的时间内返回。与TOP一起计划

没有TOP的计划

带顶部的 XML 计划Select with top on clustered column store index

没有顶部的 XML 计划

0 投票
2 回答
166 浏览

java - MariaDB ColumnStore Bulk Write SDK 需要很长时间

我正在尝试使用 Java 中的 MariaDB ColumnStore Bulk Write SDK 在具有 50 列(数据类型 int)的表中批量插入 10 行,但它从未完成必须在 10 -15 次尝试中终止进程,但结果相同。

这是他们文档中的代码示例 https://mariadb.com/kb/en/library/columnstore-bulk-write-sdk/#rhel-centos-7

尝试将列减少到 20 并且工作正常。有没有人注意到这一点?