我的数据库设计技巧很臭。在哪里寻求补救措施?

时间:2012-04-11 14:26:32

标签: performance database-design database-performance

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

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

  • 针对性能/扩展优化复杂的表/关系
  • 如何有效地编制索引。 (目前我在外键上抛出索引,这就是它)
  • 复杂数据库的一般设计原则

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

所以,我知道这有点模糊 - 但我应该在哪里确保我的数据库是以最有效的方式设计的。积分方式可能?

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

答案 2 :(得分:1)

首先,我建议学习如何使用EXPLAIN以及它的输出意味着什么。在最常见的查询上运行它并研究输出。查询是否使用合理的索引?他们在使用索引吗?一眼看上去非常简单的查询可能最终成本很高。

接下来,我建议您找到最慢的查询。 Postgres(例如)具有一项功能,允许您为运行时间超过N秒的所有查询记录SQL源。它们是否因为没有索引,非常复杂或者运行大量数据而变慢?

第三,我将查看特定查询的运行次数。您是否正在使用数据库存储静态数据,并反复敲击表以获取永远不会更改的记录?你可以把结果缓存到某个地方。