业余爱好者的数据库优化技术

Zom*_*ies 13 rdbms-agnostic sql-optimization

我们可以获得一系列基本优化技术(从建模到查询,创建索引,视图到查询优化).有一个列表,每个答案一个技术,这将是很好的.作为一个业余爱好者,我会发现这非常有用,谢谢.

为了不太模糊,假设我们使用的是MySQL或Oracle等maintstream数据库,并且数据库将在~10个表中包含500,000-1m左右的记录,其中一些具有外键约束,所有使用最典型的存储引擎(例如:InnoDB for MySQL).当然,定义PK等基础知识以及FK约束.

Bra*_*adC 15

了解索引,并正确使用它们.一般而言*,请遵循以下准则:

  • 每个表都应该有一个聚簇索引
  • 用于过滤器和排序的字段是索引的良好候选者
  • 更多选择性字段是更好的索引候选者
  • 为了在关键查询上获得最佳性能,请为这些查询设计"覆盖索引"
  • 确保您的索引实际被使用,并删除那些不是
  • 如果你的表有15个字段,并且你创建了15个索引,每个只有一个字段,那你就错了:)

*如果你知道自己在做什么,这些规则有一些例外.我的经验是Microsoft SQL Server,但我认为这些建议的大部分仍然适用于不同的RDMS.


Tho*_*mas 7

IMO,到目前为止,最好的优化是让数据模型适合构建它的问题域.如果没有,则产生的症状是难以编写或复杂的查询,以便获得所需的信息,并且在针对数据库构建报告时通常会自行查找.因此,在设计数据库时,有助于了解用户希望从系统中获取的信息的类型和性质,例如报告.


Gab*_*bák 5

在谈论数据库设计时,请查看数据库规范化,例如维基百科文章:普通表格.

如果您有一个好的设计,但仍需要优化性能,请尝试Denormalisation.

如果您有特定需求未被关系模型有效覆盖,请查看NoSQL术语涵盖的其他模型.