【问题标题】:database design asking for advice数据库设计征求意见
【发布时间】:2010-10-30 14:57:15
【问题描述】:

我需要存储模式的条目,例如(ID:int,description:varchar,updatetime:DateTime)。 ID 是唯一的主键。使用场景是,我会经常插入新条目,经常按 ID 查询条目,不经常删除过期条目(通过 updatetime 字段,使用每天运行的另一个 SQL 作业以避免数据库不断增加)。每个条目的大小为 0.5k。

我的问题是如何在我的场景中优化数据库架构设计(例如添加索引、事务/锁定级别或其他选项的技巧)以提高性能?目前我计划将所有信息存储在一个表中,不确定是否是最佳选择。

顺便说一句:我使用的是 SQL Server 2005/2008。

提前致谢, 乔治

【问题讨论】:

    标签: sql-server database-design optimization


    【解决方案1】:

    除了你的主键,只需在更新时间添加索引。

    【讨论】:

      【解决方案2】:

      您的 ID 是您的主键,它自动具有索引。 您可以将到期日期放在另一个索引上。索引 将帮助您进行搜索,但会降低性能 插入、删除和更新时。反正一个索引不是 一个问题。

      对我来说这听起来有点奇怪-我并不是说这是一个错误- 您在一张表中拥有所有信息。重新思考这一点。 看看你能不能重构一些东西。

      【讨论】:

      • 谢谢, 1. 您对索引有什么建议?在到期日创建另一个索引还是? 2. 你能告诉我更多关于为什么我应该在多个表中包含所有数据的见解吗?
      • 当然。建议在到期日建立第二个指数。考虑重构数据。如果在某个列重复任何数据(它是一个枚举),那么您可能会有另一个包含此数据的表。例如野外国家。然后,您可以在主表中仅显示国家代码,而在另一个表中显示国家列表。主表会更小,因为您不只保存外键重复。
      • 感谢@Luixv!把所有东西都放在一张桌子上好吗?我存储的是 Web 应用程序上的用户活动(日志)。
      • 我认为你在做什么没问题。将信息保存在不同表中的唯一可能点是有一个带有请求已发送页面名称的辅助表(即 index.html)。无论如何,我认为这并没有太大的区别。
      • @Luixv,按照您的建议使用辅助表时我们可以获得什么好处?我认为使用另一个表会降低性能。
      【解决方案3】:

      这听起来很简单,除了可能按照 OMax 的建议(我推荐)在 updatetime 上添加一个索引。

      如果您还想按描述获取项目,您还应该考虑在该列上设置文本索引或全文索引。

      除此之外 - 你准备好了:)

      【讨论】:

      • 将所有内容存储在一张表中可以吗?我存储的是 Web 应用程序上的用户活动(日志)。
      • 如果表这么简单,我说可以。对于大文本字段,无论哪种方式,数据库都将它们存储在单独的数据源中,因此仅针对文本字段拆分表不会添加任何内容。
      • 另外两个 cmets,1.“一个单独的数据源”——您的意思不是数据库(如文件系统?)或另一个数据库表? 2.“仅为文本字段拆分表格不会添加任何内容”-对您的意思感到困惑,如果文本列很大,为什么拆分无济于事?请您用其他语言表达您的观点吗?
      【解决方案4】:

      您决定将所有内容存储在一个表中需要重新审核。很少有主题可以真正由一张表很好地建模。

      仅使用一个表所产生的问题通常不如没有创建正确的索引和类似的东西所产生的问题那么明显。

      我对“描述”列(字段)感兴趣。是否所有描述都描述了同一种事物?您是否曾经检索过一组描述,而不是一次只检索一个描述?你如何将描述分组?

      您如何知道要检索的描述的 ID?您是否将 ID 的副本存储在某个地方,以便参考您想要的那些?

      你知道什么是“外键”吗?您是否故意选择不在此表中包含任何外键?

      在您知道单表设计是否真的适合您的情况之前,这些是您需要回答的一些问题。

      【讨论】:

      • 嗨 Walter,ID 只是增量整数,description 是当前网页的标题 -- 所以一次一个描述,每次只需要通过 ID 列随机检索其中一个完全匹配(无需全部检索)。总体来说使用foreign是好的设计,但是我目前的需求中没有预见到任何需求。如果您需要更多信息给我好的建议,请告诉我,谢谢!
      • 好的,听起来描述值都是同一种,所以把它们都放在同一列是可以的。技术术语是“来自同一个领域的所有人”。 ID 和 Updatetime 似乎属于同一张表。所以我猜你不需要超过一张桌子。现在我的问题是,为什么需要数据库?你不能把这三个字段存储在一个索引文件中吗?
      • “drwan”应该是“绘制”。哇!
      猜你喜欢
      • 2011-11-10
      • 1970-01-01
      • 2010-12-16
      • 1970-01-01
      • 2023-04-09
      • 2011-05-19
      • 2018-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多