AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 505
Accepted
Fergus
Fergus
Asked: 2011-01-11 20:49:33 +0800 CST2011-01-11 20:49:33 +0800 CST 2011-01-11 20:49:33 +0800 CST

标准化应该走多远?

  • 772

我在数据库中有大量数据。我有格式良好的表格和它们之间的良好关系,并且我的数据中有一些冗余。但是我应该在规范化方面走多远?过多的标准化是否存在性能缺陷?

performance learning
  • 5 5 个回答
  • 9024 Views

5 个回答

  • Voted
  1. Best Answer
    jcolebrand
    2011-01-11T21:29:48+08:002011-01-11T21:29:48+08:00

    你应该尽你所能,不要再进一步了。当然。~ 问题可能是这有点艺术,这就是为什么这不是一门纯粹的科学。

    我们的主要产品是分析和报告系统,所以在这方面我们有很多详细的记录。我们最初为一些子记录设计了一个公共 ID 上的大量连接,但我们发现如果我们对几个字段进行非规范化,我们可以减少很多连接,我们可以消除很多性能问题。

    但我们只知道,因为我们 1)创建了一个“规范化”设计,2)开始使用它,3)在数十个表的数亿行之后分析实际性能。

    最终的故事是,在我们进行分析之前,我们无法确定什么对我们有用。我们喜欢标准化的想法,这样我们可以更轻松地更新,但最终实际性能是决定因素。这是我给你的建议:简介,简介,简介。

    • 41
  2. REW
    2011-01-11T21:05:12+08:002011-01-11T21:05:12+08:00

    只有当规范化支持你的数据模型足以保证它时,它才是一个目标。它旨在成为允许增长、管理和可维护性的指南。请记住,关于规范化的书及其作者都不会构建或维护您的数据库或其应用程序。

    关于“过多的标准化”主题的好读物是here。

    而且,是的,过多的标准化可能会对性能产生影响。当它们被拉出到单独的表时,这将是在更深的表遍历中拾取状态指示器表之类的东西。有人会说这通常在更新速度(将状态文本从“Good”更改为“GOOD”或类似的东西)或可维护性方面被否定。

    • 11
  3. onedaywhen
    2012-04-12T01:15:07+08:002012-04-12T01:15:07+08:00

    我建议阅读Chris Date最近的几本书中的以下附录:

    为标准化欢呼两声

    规范化远不是灵丹妙药,我们可以通过考虑它的目标是什么以及它对这些目标的衡量程度很容易看出......

    我必须明确表示,我不希望我在本节中的评论被视为任何形式的攻击。我坚信,任何不完全标准化的设计都是强烈禁忌的......

    • 6
  4. bernd_k
    2011-01-11T23:41:52+08:002011-01-11T23:41:52+08:00

    我认为查看显式添加的非规范化同样重要,无论是添加的聚合值还是从复制到详细副本的主表中的某些字段。

    该论点主要是一些性能论点。

    如果您这样做,则这些字段将由触发器更新,并且由数据库来保持它们的一致性。

    • 2
  5. Isaac A. Nugroho
    2011-01-12T22:59:49+08:002011-01-12T22:59:49+08:00

    我完全同意@jcolebrand。当你为你的应用程序设计模型时,你应该尽可能地规范化一切。但是,您应该分析基于您的模型构建的查询,尤其是那些经常执行的查询。

    我自己的经验:需要两次连接才能达到的属性(这意味着连接了三个表)将主要是性能消耗。更糟糕的是,它被用于在线交易。我对属性进行了非规范化,因此它只需要一个连接并要求程序员调整他们的应用程序以进行查询和更新属性。现在效果好多了……

    换句话说,您应该平衡规范化与性能。

    • 2

相关问题

  • 您如何针对繁重的 InnoDB 工作负载调整 MySQL?

  • 如何确定是否需要或需要索引

  • 我在哪里可以找到mysql慢日志?

  • 在工作场所教授 SQL 的一些有用的 SQL 谜题在哪里?

  • 如何优化大型数据库的 mysqldump?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    您如何显示在 Oracle 数据库上执行的 SQL?

    • 2 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    我可以查看在 SQL Server 数据库上运行的历史查询吗?

    • 6 个回答
  • Marko Smith

    如何在 PostgreSQL 中使用 currval() 来获取最后插入的 id?

    • 10 个回答
  • Marko Smith

    如何在 Mac OS X 上运行 psql?

    • 11 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Marko Smith

    将数组参数传递给存储过程

    • 12 个回答
  • Martin Hope
    Manuel Leduc PostgreSQL 多列唯一约束和 NULL 值 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler 什么时候应该将主键声明为非聚集的? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    BrunoLM Guid vs INT - 哪个更好作为主键? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick 如何优化大型数据库的 mysqldump? 2011-01-04 13:13:48 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve