在我的场景中基于列的效率高吗? [已关闭]

问题描述 投票:0回答:1

我想为我们开发的一个新系统设计一个数据库,数据应该来自两个不同的资源(来自两个不同系统的两个独立的数据库),其中一个拥有大量数据(例如交易历史记录)。

我读过有关“列式数据库”或“混合数据库”的内容,我认为对于整个表,我将使用基于行的表,但仅对于一个表,例如 T1(这是事务历史记录,我需要原始表中的特定列)我将使用基于列的存储,请注明原因:

  1. 每天一次的特定时间,数据会从原表导入并写入T1,
  2. 任何时候我们都可以从T1获取聚合函数或统计数据(如前10名)。
  3. T1 不允许更新

这在 SQL Server 2016 中可能吗?引擎如何知道哪个是基于行的,哪个是基于列的?

接下来,在这样的混合数据库中应用数据挖掘算法有什么限制吗?

问候

database sql-server-2016-express
1个回答
0
投票

SQL Server 是一种关系数据库,传统上以行形式存储数据,但它也支持列存储索引,这是一种以列格式组织数据的特殊类型的索引。列存储索引可以将数据仓库和分析工作负载的性能提高多达 100 倍。

https://www.linkedin.com/pulse/how-use-sql-server-columnar-datastore-baligh-mehrez/

因此,要回答 SQL Server 是否支持这一问题,您可以创建列存储索引,SQL Server 2016 中已支持该索引。

根据第一篇文章,这些是列存储索引对您没有好处的情况(引用):

  • 桌子尺寸太小。当表有数百万行或更多时,列存储索引最有效。如果表太小,创建和维护列存储索引的开销可能会得不偿失。
  • 查询模式不可分析。列存储索引针对扫描大部分表并执行聚合(例如 SUM、COUNT 或 AVG)的分析查询进行了优化。如果查询模式更面向 OLTP,例如点查找、更新或删除,那么行存储索引可能会更高效。
  • 数据分布存在偏差。列存储索引依靠数据压缩来降低存储和 I/O 成本。但是,如果数据分布不均匀,例如列中存在许多空值或重复值,则压缩率可能会很低,并且性能可能会受到影响。
  • 不支持该数据类型。列存储索引支持SQL Server中大部分常见的数据类型,如int、varchar、datetime等,但不支持一些不太常见的数据类型,如xml、text、image等。如果你的表包含具有不受支持的数据类型的列,您无法在其上创建列存储索引。

您的场景(引用):

  1. 每天一次的特定时间,数据将从原表导入并写入T1,
  2. 任何时候我们都可以从T1获取聚合函数或统计数据(如前10名)。
  3. T1 不允许更新

T1 上不允许更新,但是,您需要确保除了您计划的作业之外不允许删除和插入,或者在其他情况下很少允许删除和插入。列式数据与聚合配合得很好,但您需要使用聚合进行测试。

您需要使用柱状表格和普通表格进行实验并比较结果才能确定。

© www.soinside.com 2019 - 2024. All rights reserved.