【问题标题】:Is a larger table or two small tables (one-to-one) for performance?是一张更大的桌子还是两张小桌子(一对一)来提高性能?
【发布时间】:2012-01-22 19:34:15
【问题描述】:

要优化读取查询:最好将数据分成两张表(一对一)还是只创建一张包含更多列的表?

(案例 1)

表:Movie_info

  • 评分
  • 演员
  • 董事
  • 说明
  • 海报

表格:电影

  • 身份证
  • 标题
  • 字幕
  • 网址
  • movieInfo_id

(案例 2)

表格:电影

  • 身份证
  • 标题
  • 字幕
  • 网址
  • 评分
  • 演员
  • 董事
  • 说明
  • 海报

数据的哪个部分是更强大的阅读查询?

【问题讨论】:

  • 你最需要阅读什么?为什么你认为分裂会有所帮助?
  • 如果你选择选项1,演员与导演或海报有关?如果选择选项 2,每部电影只能有一张海报?
  • @oded 抱歉,我认为这应该更加规范,但这是我的意见
  • 您是说“电影”与“演员”或“海报”之间存在 1::1 的关系。注意复数:“s”。有多个演员、多个不同的海报和(可能!)多个不同的导演(“西区故事:罗伯特·怀斯和杰罗姆·罗宾斯”)。与一部电影有关的“Movie_info”不应位于单独的表中(案例 1 不正确)。但是与多个不同电影(例如“演员”)相关的数据应该有不同的表。恕我直言...
  • @user1028100 您应该了解数据库规范化/优化。对于您的问题,1 表与 2 表的结果几乎相同,但如果您想要可维护性,祝您好运。为所有内容提供 1 个表不是您问题的解决方案。

标签: mysql database performance rdbms


【解决方案1】:

实际性能取决于表的实际大小,但经验法则:

"非规范化(在这个特定示例中,一个表而不是两个) 总是会提高读取性能,因为您不需要加入 关系。”

当然,当使用一对一连接时,连接关系可以由数据库系统预先计算,但那是另一回事了。

简单来说,一张桌子更好。

【讨论】:

  • 错误:一张桌子设计 = 糟糕。在这种情况下,如果你有 25 个演员使用 1 张桌子,你会怎么做?海报也一样?字幕?一个好的规范化数据库模式在正确优化和索引时总是会表现良好。我经营一家托管公司,我的 4 个最大的客户有大约 10 TB 的数据,其中一个运行一个查询 不到 1 秒,有 4 个左连接,每个表有超过 3 亿行。也许 1 个表会比 2 个表快(比如快 0.01 秒),但数据的可维护性和效率,根本就没有
猜你喜欢
  • 1970-01-01
  • 2018-04-09
  • 2011-11-17
  • 1970-01-01
  • 1970-01-01
  • 2017-02-07
  • 2011-09-25
  • 2013-12-30
  • 1970-01-01
相关资源
最近更新 更多