【问题标题】:SQL Server 2012 Table Columns & PerformanceSQL Server 2012 表列和性能
【发布时间】:2012-06-14 17:10:39
【问题描述】:

我目前有一个网站访问了 7 个 Access 数据库,我迫切需要将这些数据库迁移到 SQL Server。 7 db 设计非常快,但由于多种原因显然很差。

在 7 个数据库中,我总共拥有超过 375 个独特的数据字段,几乎所有这些字段都已填充 - 不到 2% 是空值。缺少几个键,7 个中没有数据重复,因此标准化可能不是问题。我想保持桌子很小,这样它会很快。这 7 个表都具有相同数量的记录,即 325,000 条,最多可达 400,000 条左右。

将其移至 SQL Server 时,我应该保留 7 个唯一的表还是合并为 1 个?我的理解(虽然有限)是我需要在我的存储过程中非常自律,只带回我需要的列。鉴于类似问题的种类繁多,我仍然从未就最佳方法达成“共识”。

谢谢。

【问题讨论】:

  • 这7个表的schema是否都一样?
  • “我想保持桌子很小,这样它会很快。”嗯?
  • 不确定如何回答架构问题。数据是银行数据,所以一个 db 包含资产负债表、另一个贷款数据、另一个损益表等。所有数据都通过唯一的银行 ID 绑定在一起。没有重复,也没有很多空值。

标签: sql-server database-design tablecolumn


【解决方案1】:

这取决于您的访问模式。您是否经常需要同时访问多个分区的数据?那么你可能应该将它们结合起来。

无论如何,当您只有一张表(没有一对一连接)时,开发可能会更容易。如果没有特别的理由将它们拆分,请将它们合并。

注意:我认为 SQL Server 中存在列限制。

您可以通过创建索引来公开列的子集。每个索引都将在 ID 列上设置,其中列的任意子集作为“包含”列。 这将把选择留给优化器。它将选择最好的方法。它还可以在索引之间连接,这样您就可以完全获胜。

建议:将表合二为一,并为您之前拥有的每个表创建一个索引。

【讨论】:

  • 感谢 USR,感谢您的宝贵时间。我相信您在极限(1024)上是正确的。我主要关心的不是开发的难易程度,而是存储过程恢复数据的速度。
  • 好的,从这个目标开始,您的决定取决于您的访问模式。
  • 我意识到这听起来很幼稚,但是“访问模式”是什么意思?我将使用 70 多个存储过程来触及所有不同的列(字段)。一个 SP 可能会命中 A、B 和 C 列,而另一个 SP 会命中 D 和 E。
  • 访问模式 = 您正在执行的读写操作。我收集到您主要在同一个查询中使用多个表。这意味着您需要加入,与拥有更大的行相比,这非常慢。在我看来,您最好将表格组合起来以摆脱连接。顺便说一句,您可以通过创建索引来公开列的子集。每个索引都将在 ID 列上设置,其中列的任意子集作为“包含”列。这将把选择权留给优化器。
  • 我在答案中添加了一些文字。为什么我之前没有想到呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-17
  • 1970-01-01
  • 2012-04-12
相关资源
最近更新 更多