SQL Server:当我总是要重新加入它们时,垂直分区有什么价值吗?

2023-12-26

我面临着必须向已经有 32 列的表添加 64 个新列。举个例子:

Customers
(
    CustomerID int
    Name        varchar(50)
    Address     varchar(50)
    City        varchar(50)
    Region      varchar(50)
    PostalCode  varchar(50)
    Country     varchar(2)
    Telephone   varchar(20)

    ...
    NewColumn1  int null
    NewColumn2  uniqueidentifier null
    NewColumn3  varchar(50)
    NewColumn4  varchar(50)
    ...
    NewColumn64 datetime null

    ...
    CreatedDate datetime
    LastModifiedDate datetime
    LastModifiedWorkstation varchar(50)
    LastModifiedUser varchar(50)
)

大多数时候,这些新列中的大多数将包含null.

这也是一个给定的事实if我将这 64 个新列垂直划分到一个新表中,然后每次我SELECT来自客户:

SELECT ...
FROM Customers

必须转换为联接才能获取分区值(即有never在我不需要新列的情况下可以获得性能增益):

SELECT ...
FROM Customers
    INNER JOIN Customers_ExtraColumns
    ON Customers.CustomerID = Customers_ExtraColumns.CustomerID

这就是一个con划分列。

另一个con是我必须管理同时将行插入到两个表中,而不仅仅是一个表中。

决赛con我能想到的是 SQL Server 现在必须执行INNER JOIN任何时候我想访问“顾客“。现在并且永远会浪费 CPU 和 I/O 来连接实际上是一个表的表 - 只不过我决定将它们分开。

所以我的问题是:为什么我要把它们分开?

当 64 列大部分为空时,将它们垂直划分到一个单独的表中是否有任何价值? Null 占用的空间很小......

有什么优点?

Edit:为什么我还要考虑分区?它大部分是空数据,会使表中的列数增加三倍。Surely一定很糟糕!


为了数据模型的简单性,如果没有进一步的信息,我可能不会分区,但是您没有指出这些新列中数据的性质(也许某些列是应该标准化的数组)。

不过,有几点:

如果您进行垂直分区,并且对补充表有 FK 约束,这可能有助于消除某些情况下的联接,因为它知道将存在且只有一行。显然,它将在相同的唯一键上建立索引,这将有助于消除确定是否存在交叉联接的需要,因为只能有 0 或 1 行。

您可以拥有一个连接两个表的可更新视图,并在视图上有一个触发器,该触发器插入到连接的两个表中以形成视图。您还可以决定进行左连接,并且仅在需要补充行的任何列不为 NULL 时才创建补充行。

您还可以使用一组稀疏连接的补充数据表。显然,这也需要联接,但您也可以对多个补充表使用类似的技术,就像对 1 一样。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL Server:当我总是要重新加入它们时,垂直分区有什么价值吗? 的相关文章

  • 分组依据但包含“缺失”值

    假设我有以下内容 select case when fcompany Acme then Red when fcompany Acme Rockets then Blue else Green end Color sum fann sale
  • ROW_NUMBER SQL Server 2000 的替代方案

    现在我在 SQL Server 2008 的过程中使用 ROW NUMBER 如下所示 WITH cars as SELECT carid mileage retailprice imageurl model year Zips Dista
  • 可以将其作为 SQL Server 作业吗?

    我有一个文件夹 其中包含用于使用徽章的图像 我有另一个文件夹 其中包含图像的重命名版本 该文件夹位于另一台计算机上 我需要创建一个过程来复制和重命名找到的任何新图像 名称之间的映射位于 SQL Server DB 中 将其创建为 SQL S
  • MySQL 中的 timestampdiff() 相当于 SQL Server 中的 datediff() 吗?

    我正在致力于将功能从 SQL Server 2000 迁移到 MySQL 在 SQL Server 2000 中执行以下语句 输出为 109 SELECT DATEDIFF wk 2012 09 01 2014 10 01 AS NoOfW
  • 将 SQL Server 数据库从 2005 转换为 2000

    我们有一个 Microsoft SQL Server 2005 数据库需要转换回 SQL Server 2000 有人对我应该用来执行此转换的方法或工具有任何建议吗 我们没有在数据库中使用任何 SQL Server 2005 特定功能 因此
  • 我可以通过转义单引号并用单引号包围用户输入来防止 SQL 注入吗?

    我意识到参数化 SQL 查询是在构建包含用户输入的查询时清理用户输入的最佳方法 但我想知道获取用户输入并转义任何单引号并用单引号包围整个字符串有什么问题 这是代码 sSanitizedInput Replace sInput 用户输入的任何
  • 如何从 SQL Server 2000-2008 中位于一组名称的多个表中选择列名称

    如果我有一组这样的名字 first fname firstname namef namefirst name SQL Server 2000 2008 中检索包含上述特定数据库的列名的不同表名的最佳方法是什么 我想从显示的表列表中排除系统表
  • 用于选择首选糖果的高效 SQL 2000 查询

    我希望我能想出一个更具描述性的标题 如果您能说出我要询问的查询类型 请建议一个或编辑这篇文章 数据库 SQL Server 2000 示例数据 假设 500 000 行 Name Candy PreferenceFactor Jim Cho
  • 是否有 RedGate 的“穷人”替代品来编写整个数据库模式的脚本? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我现在的情况是 我想为数据库生成一个脚本 我可以在另一台服务器上运行该脚本 并获得与原始数据库相同的数
  • SQL Server 2000 实时数据镜像

    我目前正在使用 2 个 sql 2000 服务器 其中一个可以查询 但不能添加任何数据库 这导致第二个服务器有很多查询 这些查询使用第一个服务器作为链接服务器 我想在查询实时数据的同时提高性能 是否可以将实时数据镜像到第二台服务器 这样查询
  • 选择另一个表中不存在的值

    我有两张桌子 Table A ID 1 2 3 4 Table B ID 1 2 3 我有两个请求 我想选择表 A 中表 B 没有的所有行 在本例中是第 4 行 我想删除表 B 中没有的所有行 我正在使用 SQL Server 2000 你
  • 如何确定特定 Sql Server 2000 数据库中任何记录的最后更改时间?

    我有一个很少更新的 SQL Server 2000 数据库实例 我还有一个数据库表 其中没有保存每行的创建日期或修改日期的列 有什么方法可以确定上次对整个数据库执行更新或插入的时间 以便我至少可以限制表中的特定记录何时可能发生更改 注意 我
  • HRESULT:0x8004D00E 使用 TransactionScope - C#

    当我尝试在连接到 SQL Server 2000 的 Windows Server 2003 Standard Edition SP1 计算机上运行 C WinForms 应用程序 转换 WinForms 应用程序中的数据并将转换后的数据插
  • SQL Server 2000:如何从存储过程将图像变量保存到文件系统中的文件

    我有一个存储过程 它接收 Data image范围 我想将它从存储过程保存到文件系统 知道怎么做吗 您可以使用 OLE 自动化 ADODB Stream 从 SQL Server 2000 存储过程写入二进制数据 如下所述here http
  • SQL Server 的 SELECT JOIN 语句导致的死锁

    当执行带有两个表的 JOIN 的 SELECT 语句时 SQL Server 似乎 分别锁定语句的两个表 例如通过像这样的查询 这 SELECT FROM table1 LEFT JOIN table2 ON table1 id table
  • 替换sql server 2000中的ntext(超过4000个字符)

    如何替换sql server 2000中ntext列中超过4000个字符的文本 转换为 nvarchar max 不起作用 因为它会截断值 使用 TEXT NTEXT 是一团糟 这是尽快摆脱这些字段的众多原因之一 您需要使用 READTEX
  • 如何将 LEFT JOIN 限制为 SQL Server 中的第一个结果?

    我有一些 SQL 几乎可以做我想做的事情 我正在使用三个表 Users UserPhoneNumbers 和 UserPhoneNumberTypes 我正在尝试获取用户列表及其电话号码以供导出 数据库本身很旧并且存在一些完整性问题 我的问
  • SQL/C# - UPSERT 上的主键错误

    UPDATE 简化的问题 从问题中删除了 C 在以下情况下 如何编写一个可以识别两行相同的 UPSERT 看看怎么有一个 b 退格键 在那里编码 奇怪的小字符 SQL 将它们视为相同 虽然我的 UPSERT 将此视为new data并在应该
  • 如何连接子查询的第一行?

    我有一个发票表和一个按键关联的相关数据的子表 特别是 对于每张发票 我只对子表中的第一个相关行感兴趣 鉴于我想要每个发票键都有一个相关行 我该如何实现这一点 Select i Invoice Number c Carrier Name Fr
  • 为什么 Sql Server 2000 上的 TSQL 对小数点的舍入不一致?

    我正在尝试计算美元金额的折扣百分比 在 50 的情况下 有时你会得到半分钱 我需要将其四舍五入到最接近的一分钱 在Sql中 我的计算如下 round retail 0 5 2 0 如果我采用以下值 我会得到不同的结果 4 39 2 49 不

随机推荐

  • 获取亚马逊 s3 存储桶大小的最快方法

    截至目前 我正在通过迭代所有对象并将单个对象的大小相加来计算亚马逊 s3 存储桶的大小 这是相当耗时的 我尝试并行操作并节省了一些时间 但即使这样也需要很多时间 我正在使用的系统 EC2 m1 large 是否有任何解决方法或更好的方法来找
  • 如何使用 Apache Commons 以多部分形式读取其他参数

    我有一个文件上传表单 正在发送回 servlet 使用多部分 表单数据编码 在 servlet 中 我尝试使用 Apache Commons 来处理上传 但是 我的表单中还有一些其他字段只是普通字段 如何从请求中读取这些参数 例如 在我的
  • 如何避免CodeIgniter中的SQL注入?

    有没有什么方法可以在配置文件中设置以避免SQL注入 我使用此代码来选择值 this gt db gt query SELECT FROM tablename WHERE var val1 这用于插入值 this gt db gt query
  • 在纱线集群上运行时引发 ClassNotFoundException

    my code import org apache spark SparkConf SparkContext object Run extends App val conf new SparkConf setMaster yarn clus
  • 如何保护用于让用户上传文件的文件夹的安全?

    我的 Web 服务器中有一个文件夹 供用户使用 ASP 页面上传照片 授予 IUSR 对该文件夹的写入权限是否足够安全 我必须确保其他东西吗 我担心黑客会绕过 ASP 页面 直接将内容上传到文件夹中 我在 Windows 2003 Serv
  • 原型有 hash.inspect() 方法。 jQuery 世界中的等价物是什么?

    我正在使用 jQuery 我正在处理 JSON 对象 并且需要一次又一次地查看数据 我做了警报 数据 但没有得到任何有用的东西 在原型世界中 他们有非常有用的检查方法 检查原型中的方法 http www tutorialspoint com
  • TensorFlow 2 自定义损失:“没有为任何变量提供梯度”错误

    我有一个图像分割问题必须在 TensorFlow 2 中解决 特别是 我有一个由航空图像及其各自的掩模配对组成的训练集 在蒙版中 地形为黑色 建筑物为白色 目的是预测测试集中图像的掩模 我使用带有最终 Conv2DTranspose 的 U
  • 从 UIImageView 中删除图像

    我加载一个UIImageView具有取决于用户交互的图像 当父视图最初显示时 没有选择任何图像 并且图像视图是黑色的 如果用户离开该视图并返回 图像仍然存在 我试过了 myImageView image nil 离开视图但图像仍然存在 我怎
  • 布尔值与可选 true [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 描述可以处于 选中 或 未选中 状态的某些标志的更好方法是什么 interface OperationResult success true i
  • Google Analytics (gtag.js):产品列表名称不显示,但其他字段显示

    我正在使用新的 GA 增强型电子商务gtag js图书馆 我想按照此处的文档发送有关产品印象和产品点击的信息 https developers google com analytics devguides collection gtagjs
  • Swift:将函数分配给变量

    我有一个 swift 类 其中包含以下变量 var pendingFunction Double Double gt Double 斯威夫特然后告诉我 类型名称后预期的成员名称或构造函数调用 它坚持要求我将代码更改为 var pending
  • Mongoimport 忽略 csv 中的前导零

    我有一个 CSV从 SQL Server 数据库导出文件 其中包含电话号码字段 数字类型 该字段值以前导零开头 CSV 文件中显示前导零 当我尝试将其 mongoimport 到数据库 字符串类型 时 我发现导入的数据没有前导零 目标字段编
  • 将新列附加到现有 parquet 文件

    有没有办法将新列附加到现有的镶木地板文件中 我目前正在参加 Kaggle 比赛 我已将所有数据转换为镶木地板文件 情况是这样的 我将 parquet 文件读入 pyspark DataFrame 进行了一些特征提取 并将新列附加到 Data
  • 如何登录 Azure Web 作业? [复制]

    这个问题在这里已经有答案了 所以我尝试过 Trace TraceInformation Trace Information Found message on queue Debug WriteLine Debug Found message
  • 调整缩略图大小 django Heroku,“后端不支持绝对路径”

    我已经使用 Django 在 Heroku 上部署了一个应用程序 到目前为止它似乎可以正常工作 但我在上传新缩略图时遇到问题 我安装了 Pillow 以便在上传图像时调整图像大小 并保存调整大小的缩略图 而不是原始图像 但是 每次上传时 都
  • 使用通用控制器时,如何返回特定控制器固有的视图?

    这个答案的结果是 https stackoverflow com a 10708026 694597 https stackoverflow com a 10708026 694597 我想知道在使用通用控制器时如何返回特定控制器固有的视图
  • 在 Safari 上使用 remodal 和 pickadate 时出现严重的性能问题

    我试图将 remodal 与 pickadate 一起使用 这样我就可以从模式中创建日期选择器和时间选择器 在第一次试验中 我发现日期选择器将被重新模态隐藏 如下所示 为了解决这个问题我创建了一个 full screen我的改造课程 rem
  • 在 Java 9 模块中找不到 Derby 驱动程序

    我正在尝试让 Java 9 模块连接到内置的 Derby 数据库 嵌入模式 我的模块依赖于java sql 但我不确定将 Derby 驱动程序放在哪里 这是我的module info java module mymodule require
  • 广播接收器,在启动时检查复选框首选项状态,然后发送通知

    我的问题是 当我尝试在启动时从不同的活动读取复选框首选项状态时 然后发送状态栏通知 然后 当设备启动时 我会弹出强制关闭错误消息 然后当我进入错误日志时 我不明白发生了什么 广播接收器的代码如下所示 Override public void
  • SQL Server:当我总是要重新加入它们时,垂直分区有什么价值吗?

    我面临着必须向已经有 32 列的表添加 64 个新列 举个例子 Customers CustomerID int Name varchar 50 Address varchar 50 City varchar 50 Region varch