Sql server 使用存储过程控制所有数据流的海量表的优缺点

Sql server 使用存储过程控制所有数据流的海量表的优缺点,sql-server,stored-procedures,datamodel,Sql Server,Stored Procedures,Datamodel,DBA(只有2年的google培训)创建了一个海量数据管理表(108列,并且还在增长),其中包含系统中任何数据流的所有必要属性。我们把这张桌子简称为BFT 在这些列中: 10用于元数据参考。 15个用于数据源和时间跟踪 1个文本数据的新/当前列实例 用于多值数字更新的10个新/当前/增量/比率/范围列实例 :共50列 多值数值更新通常只需要2-5个更新组 一批15K-1500K记录被加载到BFT中,并由具有逻辑的存储过程进行处理,以验证这些记录,然后将它们转移到大约30个其他表中的永久存储中 在

DBA(只有2年的google培训)创建了一个海量数据管理表(108列,并且还在增长),其中包含系统中任何数据流的所有必要属性。我们把这张桌子简称为BFT

在这些列中:
10用于元数据参考。
15个用于数据源和时间跟踪
1个文本数据的新/当前列实例
用于多值数字更新的10个新/当前/增量/比率/范围列实例 :共50列

多值数值更新通常只需要2-5个更新组

一批15K-1500K记录被加载到BFT中,并由具有逻辑的存储过程进行处理,以验证这些记录,然后将它们转移到大约30个其他表中的永久存储中

在大多数记录加载中,50-70列在整个过程中都是空的

我不是数据库专家,但这个模型和过程似乎有点异味,但我不知道为什么,也不想在无法提供替代方案的情况下抱怨


鉴于对数据处理模型的了解很少,有人有什么想法或建议吗?数据库(SQL Server)是否可以有效地处理大部分为空列的记录,或者以这种方式进行处理是否会浪费大量的周期/内存等。

这里的关键字是规范化。如果有这么多空值,很可能会浪费大量空间。对表进行规范化还应使此表中的数据完整性更易于实施。

规范化是此处的关键词。如果有这么多空值,很可能会浪费大量空间。规范化表还应使此表中的数据完整性更易于实施。

我通常有多个对应于输入负载的暂存表。这些表可能与目标表对应,也可能与目标表不对应,但我们不做您所说的。如果他不喜欢有很多基本上是临时的工作表,那么可以将它们放在自己的模式中,甚至放在单独的数据库中


对于空的列,如果它们没有在处理BFT的特定查询中被引用,这并不重要,但是,如果选择的索引是非聚集覆盖索引,那么索引将变得更加重要。当使用BFT并选择表扫描或聚集索引扫描时,必须读取未使用的列并忽略或跳过,根据我的经验,这显然会影响处理。而对于非聚集索引扫描或搜索,读取的列更少,希望这不包括(m)任何未使用的列。

我通常有多个对应于输入负载的暂存表。这些表可能与目标表对应,也可能与目标表不对应,但我们不做您所说的。如果他不喜欢有很多基本上是临时的工作表,那么可以将它们放在自己的模式中,甚至放在单独的数据库中


对于空的列,如果它们没有在处理BFT的特定查询中被引用,这并不重要,但是,如果选择的索引是非聚集覆盖索引,那么索引将变得更加重要。当使用BFT并选择表扫描或聚集索引扫描时,必须读取未使用的列并忽略或跳过,根据我的经验,这显然会影响处理。而使用非聚集索引扫描或搜索,读取的列更少,希望这不包括(m)任何未使用的列。

听起来像是他重新发明的。

听起来像是他重新发明的。

一件事可能会使事情更灵活一些(除了规范化)可以创建一个或多个视图或表函数来表示数据。特别是如果桌子不在你的控制范围内,这将使你能够过滤掉虚假的垃圾,只从桌子上抓取你需要的东西

然而,如果你想成为处理(每次你不得不打开)那张庞大的表的人之一,你可能会想超越DBA的“设计”并规范化这只野兽,也许会让DBA承担创建一些视图和/或表函数的任务来帮助你


我目前使用的是一个类似但不太大的表,它在我们的系统中已经存在了多年,并且有了新的字段、索引和约束条件,相当仓促地采用了弗兰肯斯坦风格。不幸的是,其他一些工作组将结构视为福音,因此我们创建了这样的视图和函数,以使我们能够按照需要的方式“塑造”数据。

一件事可能会使事情更灵活一些(而不是规范化),那就是创建一个或多个视图或表函数来表示数据。特别是如果桌子不在你的控制范围内,这将使你能够过滤掉虚假的垃圾,只从桌子上抓取你需要的东西

然而,如果你想成为处理(每次你不得不打开)那张庞大的表的人之一,你可能会想超越DBA的“设计”并规范化这只野兽,也许会让DBA承担创建一些视图和/或表函数的任务来帮助你


我目前使用的是一个类似但不太大的表,它在我们的系统中已经存在了多年,并且有了新的字段、索引和约束条件,相当仓促地采用了弗兰肯斯坦风格。不幸的是,其他一些工作组将该结构视为福音,因此我们创建了此类视图和函数,以使我们能够按照需要的方式“塑造”数据。

有一些暂存表,用于捕获大约12种不同格式的原始输入数据。当这些被解析为元数据类型时,原始阶段数据会生成一个或多个BFT记录,然后