【问题标题】:My Database Design skills stink. Where to seek remedy?我的数据库设计技能很糟糕。到哪里寻求补救?
【发布时间】:2012-04-23 21:02:48
【问题描述】:

我有一个网站,它在流量和数据库设计的复杂性方面都在逐步扩展。我一直首先是作为一名开发人员工作,除了我需要做的让我的代码运行之外,我从来没有真正成为一名数据库管理员。这需要改变 - 我需要提高数据库方面的效率。

举一个模糊的例子,我正在寻找如何去学习:

  • 针对性能/扩展优化复杂表/关系
  • 如何高效索引。 (目前我在外键上添加索引,仅此而已)
  • 复杂数据库的一般设计原则

我发现的大多数资源要么更多地针对 SQL 的基础知识(“这是一个 SELECT 查询、一个 JOIN 等”),要么主要关注数据库之外的性能问题。

所以,我知道这有点含糊 - 但我应该在哪里寻找以确保我的数据库以最有效和最完整的方式设计?

【问题讨论】:

    标签: performance database-design database-performance


    【解决方案1】:
    1. 了解数据建模。选择正确的数据结构始终是至关重要的第一步,尤其是对于一般编程,尤其是数据库。性能不能在糟糕的数据结构之上“固定”! ERwin Methods Guide 可能是开始学习数据建模的好方法。
    2. 了解 DBMS 如何在物理级别组织数据。这将极大地帮助您了解如何“塑造”您的数据以提高性能,以及如何有效地利用现代 DBMS 为您提供的许多性能机制。 Use The Index, Luke! 是关于该主题的优秀教程。
    3. 了解如何有效地访问数据库,并确保您真正了解将从您的代码中调用的客户端 API。不同的 API 有自己的特性,但它们都有一些共同的主题,例如参数绑定、查询准备和获取。即使您被 ORM“保护”而不必手动绑定参数,这仍然是“在幕后”发生的,理解它可以提高您编写高性能代码的能力。
    4. 测量,测量,测量。现代信息系统非常复杂,即使专家也发现自己做出了错误的假设,所以不要依赖假设!

    【讨论】:

      【解决方案2】:

      【讨论】:

        【解决方案3】:

        首先,我建议学习如何使用 EXPLAIN 及其输出的含义。在最常见的查询上运行它并研究输出。查询是否使用了合理的索引?他们是否在使用索引?乍一看很简单的查询最终可能会非常昂贵。

        接下来,我建议您找出最慢的查询。 Postgres(例如)有一个功能,允许您记录所有运行时间超过 N 秒的查询的 SQL 源。它们速度慢是因为它们没有编制索引、非常复杂还是需要处理大量数据?

        第三,我会查看特定查询的运行次数。您是否使用数据库来存储静态数据,并一遍又一遍地访问一个表以获取一条永不改变的记录?您可能可以将结果缓存在某处。

        【讨论】:

          猜你喜欢
          • 2011-12-31
          • 1970-01-01
          • 2010-09-15
          • 2010-10-14
          • 2021-10-02
          • 2010-12-13
          • 2020-01-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多