1

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

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

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

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

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

4

3 回答 3

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

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

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

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

于 2012-04-11T14:38:29.737 回答