【问题标题】:Question about database design关于数据库设计的问题
【发布时间】:2011-10-26 17:41:40
【问题描述】:

我在房地产公司工作,我们即将用C#开发新版本的windows应用程序。

这是当前情况的摘要:

我们有 400 万条记录并且还在增加,我们使用SQL Server 2005 将这些记录存储在一个 52 列的表中。几乎所有最终用户在每次搜索时至少使用 30 到 40 列。

我知道这不是标准设计,但我尝试了很多场景, 我已经将这 52 列拆分到其他表并建立了主题之间的关系,但是使用一个表时性能仍然更好(即使没有主键!)我已经添加了索引,但是添加索引是不合逻辑的所有列。

我们还有其他限制,用户的硬件,他们中的许多人仍然有 Pentium II。

另一方面,我们有 Google 桌面搜索 GDS 。我在他们的电脑上测试过这个应用程序,性能还是不错的。

SQL 服务器和GDS 引擎有什么区别?

是否可以使用GDS 之类的引擎来存储我的数据?这种存储的名称是什么?

【问题讨论】:

  • 你能举一个你的表和一些查询的例子吗?我知道你不能真的只是发布你的架构,但如果我们有办法查看当前数据是如何排列然后搜索的,我敢打赌你可以得到一些更具体的帮助来实际获得一个适合你的设计,而无需做一张大桌子。

标签: c# sql-server indexing


【解决方案1】:

这实际上取决于您如何应用索引。此外,您可以拥有一组用于应用程序的表格和一组用于报告的表格。这样,您可以提高报告的性能,并且仍然保持数据正确。因此,每次您获得关系数据结构的更新时,您都有一个流程可以获取该数据并将其迁移到您的数据库中,这样查询速度会更快。

【讨论】:

  • Tomas,我没看图,你的意思是我必须在一个数据库中制作重复数据,一组(所以我必须使用一些表来存储而不是一个表)进行报告并准备使用应用程序?
  • 是的,没错。或者您可以在数据库中使用视图,但我不确定它们在 MSSQL 中是否更快。但是使用两组表(或两个数据库),其中关系表将确保您的应用程序数据具有正确的状态,而非规范化表将提高查询性能。
【解决方案2】:

是否可以使用类似 GDS 的引擎来存储我的数据?这些存储的名称是什么?

是的,这些被广泛称为NoSQL,并且有几十个不同的“数据库”专门用于非关系数据存储。

话虽如此,在更大的计划中,400 万条记录甚至不算多,几乎可以肯定,这里的数据库设计有问题。很少有单表设计最快的情况,SQL Server 等引擎非常擅长处理关系数据。看看this one 之类的讨论,也许在做出任何决定之前了解更多关于数据库设计和优化的知识。

【讨论】:

    【解决方案3】:

    GDS 和 SQL 不一样。但是,SQL Server 具有(作为可选组件)一个名为 Full-Text Search 的功能,它可能有助于实现您的需求。

    总的来说,我想以下可能是一个很好的解决方案:

    • 标准化您的数据库 - 如果您没有使用标准化数据库获得更好的性能,那么您肯定没有设置正确的主键和外键。
    • 在需要搜索的文本字段上使用提及的 FTS

    【讨论】:

      猜你喜欢
      • 2021-07-03
      • 1970-01-01
      • 2011-09-06
      • 1970-01-01
      • 1970-01-01
      • 2010-09-14
      • 2011-08-06
      • 1970-01-01
      相关资源
      最近更新 更多