问题标签 [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.
sql-server - 在 SQL Server 2014 中使用聚集列存储索引时,具有大量列的表是否仍然是反模式?
阅读 SQL Server 2014 中的聚集列存储索引,我想知道是否拥有一个包含大量列的表仍然是一种反模式。目前,为了缓解单个表包含大量列的问题,我正在使用垂直分区,但有可用的聚集列存储索引,这不应该是必需的。这是正确的还是我错过了什么?
示例: 让我们以性能计数器的日志为例,原始数据可能具有以下结构:
拥有这样一个具有 1000 列的表是邪恶的,因为一行很可能跨越一页以上,因为通常不太可能对所有措施感兴趣,但查询总是会产生 IO 成本等。 .. 解决这种垂直分区通常会有所帮助,例如,可以按类别(CPU、RAM 等)在不同表中对性能计数器进行分区。
相反,将这样的表作为聚集列存储索引不应该是这样的问题,因为数据将按列存储,并且每个查询所涉及的 IO 将仅涉及请求的列,无论在桌子。
sql-server - 使用表锁定更新列存储索引
我目前正在处理一项棘手的任务。
背景:
- 我有一个包含多个表和大量行的 MSSQL 2012 数据库。由于在此数据库中搜索需要相当长的时间,因此我寻找改进查询的方法。(是的,我正在使用索引,已经查看了执行计划和类似的东西:-))经过一番调查,我在 MSSQL 2012 Enterprise 中找到了列存储索引。这让我在搜索过程中获得了巨大的性能提升。
- 缺点:启用索引后,无法插入/更新/删除数据
目标:
- 我想要快速搜索
- 应该可以一次运行多个工作人员来插入/更新/删除具有列存储索引的数据(在访问相同 表的多个工作人员之间拆分工作)(通常在夜间完成)
- 工作人员完成任务执行索引后,应重建(其他工作人员应等到那时)
- 之后工作人员应继续并在必要时再次禁用索引
当前解决方案:
目前有一个解决方案,但它不能 100% 工作,因为仍然会收到有时无法执行 UPDATES 和 INSERTS 的消息,因为应该首先禁用列存储索引(但它们应该根据我所做的)或者那里是在调用存储过程以操作数据期间出现的死锁。
一个简短的概述我做了什么。我不确定它是否是使用列存储索引更新表的最佳方法。还阅读了有关分区切换的信息,但当前未使用分区(由于数据结构和搜索)
我在 MSSQL 数据库中有以下存储过程。
sp_columnstore_entity_disable(禁用表上的索引)
sp_columnstore_entity_rebuild(重建表上的索引)
sp_entity_insert_update
worker 的程序代码如下所示:
问题:
有时我会收到错误消息,例如事务(进程 ID)在锁定资源上与另一个进程死锁,并被选为死锁受害者,我的进程崩溃。
有时我会收到错误,因为列存储索引处于活动状态,所以 INSERT 或 UPDATE 是不可能的。
我已经考虑过表锁在重建和修改期间不会遇到竞争条件。
我很高兴有任何解决问题的建议或帮助
sql-server - ColumnStore Index vs Columnar DB
There is an option called "ColumnStore Index" available in SQL Server 2012.
Is it comparable with columnar databases such as Cassandra, HBase?
Few advantages of going with SQL Server 2012 can be:
- It is Updateable
- It is Relational
What other factors can be considered to choose between SQL Server 2012 and other Columnar databases in case faster query performance is a requirement.
sql-server - 宽表的最佳 SQL 索引计划
你好 SQL 大师在那里......我有这个月之久的问题,我似乎无法解决。我有这个非常宽的(报告)表大约。100多个领域。目前,它有大约 200 万条记录,并且随着数据的出现速度,它可能会在未来 1-2 个月内翻一番。目前运行可以接受。但在接下来的几个月里不再那么确定了。基本上,我只想知道这种类型的表的最佳索引计划是什么。这不是实际的表格,但非常接近。我只是想说明使用的各种数据类型。
现在,当前以这种方式查询此表:
每个参数/字段的可能值为:
我知道基本的执行计划阅读和我所看到的......有很多扫描正在进行。但正如我所说,似乎我已经碰壁了,这就是我现在在这里寻求帮助的原因:)。我知道如何根据小表的用途来索引小表,但表这么宽?我只能对自己哈哈大笑:D
有什么想法吗?我已经阅读了一些关于 Columnstore INDEX 的内容。这是我能想到的最可行的解决方案。但目前关于这种方法的可用信息非常少。
如果你想知道我是怎么想出这张桌子的。那么它的内容来自不同的表(展平)。每晚进行处理。结果被导出到 CSV 文件中,然后该文件将用作另一个报告应用程序的数据源。
提前致谢!
sql-server - 为什么具有非聚集列存储索引的表必须是只读的?
我正在阅读 [这篇 MSDN 文章]。(http://msdn.microsoft.com/en-us/library/gg492088.aspx)
聚集索引和非聚集索引之间的主要区别之一是聚集索引是可更新的。很好 - 但是非聚集索引的什么属性导致它(和表)是只读的?为什么对表的更改不能反映在索引中?
indexing - 在 SSDT for Visual Studio 2013 中创建聚集列存储索引
我创建了一个包含大量事实和维度表的数据仓库。对于每个事实表,我都在尝试创建一个聚集列存储索引,但我一直遇到问题。我使用以下语句来尝试完成此操作。
创建集群列存储索引 CStoreIX_FactAssessment ON FactAssessment
出于某种原因,它一直突出显示 CREATE 一词并给出消息“SQL70001:此语句在此上下文中无法识别”。我确定我从工具>扩展和更新菜单下载了最新版本的 SSDT,但仍然有问题。我试图在这个解决方案中保留我的所有数据库代码,例如创建索引、约束等,而不是转移到管理工作室来添加它们。有没有其他人遇到过这个问题,或者有没有人知道我可能做错了什么?任何帮助表示赞赏!
clustered-index - 如何定义表是否适合聚集列存储索引?
我已阅读(此处、此处和此处)关于 SQL Server 2014 中引入的聚集列存储索引。基本上,现在:
- 列存储索引可以更新
- 可以修改表架构(不删除列存储索引)
- 基表的结构可以是柱状的
- 压缩效果节省的空间(使用列存储索引,您可以节省用于表的初始空间的 40% 到 50%)
此外,它们还支持:
- 行模式和批处理模式处理
- 批量插入语句
- 更多数据类型
据我了解,有一些限制,例如:
- 不支持的数据类型
- 无法创建其他索引
但正如所说:
使用聚集列存储索引,已经涵盖了所有过滤器的可能性;使用段消除的查询处理器将能够仅考虑查询子句所需的段。在无法应用段消除的列上,所有扫描都将比 B-Tree 索引扫描更快,因为数据被压缩,因此需要更少的 I/O 操作。
我对以下内容感兴趣:
- 上面的陈述是否说当存在大量重复值时,聚集列存储索引总是比 B-Tree 索引更适合提取数据?
covering
例如,当表有很多列时,聚集列存储索引和非聚集 B-Tree 索引之间的性能如何?- 我可以在一张表上同时使用聚集和非聚集列存储索引吗?
- 最重要的是,谁能告诉如何确定一个表是否适合列存储索引?
据说最好的候选者是不经常执行更新/删除/插入操作的表。例如,我有一个存储大小超过 17 GB(约 7000 万行)的表,并且不断插入和删除新记录。另一方面,执行了许多使用其列的查询。或者我有一个存储大小约为 40 GB(约 6000 万行)的表,每天执行许多插入 - 它不经常查询,但我想减小它的大小。
我知道答案主要在于运行生产测试,但在此之前我需要选择更好的候选人。
sql-server - SQL Server 2014 中内存优化表的列存储索引
我们可以在 SQL Server 2014 中的内存优化表上创建聚集/非聚集列存储索引吗?
sql-server - SQL Server 聚集列索引内存
我正在研究 SQL 2014 中新聚集列索引的使用。当 MS 说这些是“内存中”时,这到底是什么意思?这些天来,“记忆中”的绰号被广泛使用。这是否意味着整个表一直在内存中?或者它是否被交换到磁盘。如果整个表一直在内存中,我不想使用。
谢谢!
entity-framework-6 - 具有实体框架的集群列存储
我有一个带有聚集列存储索引的表。由于索引,此表不能有主键。它实际上有一个 ID 列,但我不能在上面放置索引。实体框架需要一个密钥,否则它将其标记为只读。我如何告诉 EF 密钥是什么?