# 数据库性能建议（由 Azure PSQL 提供）

**URL:** https://meta.discourse.org/t/database-performance-recommendations-by-azure-psql/141166
**Category:** Development
**Created:** [2020年二月10日 11:10 UTC](https://meta.discourse.org/t/database-performance-recommendations-by-azure-psql/141166 "2020-02-10T11:10:28Z")
**Posts on this page:** 3
**Page:** 1

<div class="post-metadata">

### Author: ![klopsknoedel](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/klopsknoedel/32/194126_2.png) [@klopsknoedel](https://meta.discourse.org/u/klopsknoedel)
#### Post date: [2020年二月10日 11:10 UTC](https://meta.discourse.org/t/database-performance-recommendations-by-azure-psql/141166/1 "2020-02-10T11:10:28Z")

</div>

您好，

我们基于 Azure 的“Azure Database for PostgreSQL”实例托管我们的 Discourse 论坛。该服务的一个优势是能够根据“数据库特征”和使用情况提供[性能建议](https://docs.microsoft.com/zh-cn/azure/postgresql/concepts-performance-recommendations)。

自从迁移到 Azure 后，我们收到了一些关于缺失索引和可能冗余索引的提示，想与大家分享。

在创建这些缺失的索引后，我们观察到整体性能有轻微（幅度不大）的提升，但我们无法应用 `DROP INDEX` 建议，因为这可能会破坏即将进行的更新或数据库迁移。无论如何，我们无法确定这些索引是否可以安全删除，或者删除后是否会对性能产生负面影响。

以下是 Azure 建议我们创建的索引（影响程度为“低”和“中等”）：  
[create-indexes.csv](https://meta.discourse.org/uploads/short-url/dw1U4hctATusBlHsUmWQXeme66j.csv) (1.5 KB)

以下是针对“已覆盖”索引的建议：

> **摘要**
>
> > 删除表 `public.optimized_images` 上的索引 `index_optimized_images_on_upload_id`。  
> > 原因：该索引已被 `index_optimized_images_on_upload_id_and_width_and_height` 覆盖。
> 
> > 删除表 `public.post_revisions` 上的索引 `index_post_revisions_on_post_id`。  
> > 原因：该索引已被 `index_post_revisions_on_post_id_and_number` 覆盖。
> 
> > 删除表 `public.post_timings` 上的索引 `post_timings_summary`。  
> > 原因：该索引已被 `post_timings_unique` 覆盖。
> 
> > 删除表 `public.topic_links` 上的索引 `index_topic_links_on_topic_id`。  
> > 原因：该索引已被 `unique_post_links` 覆盖。
> 
> > 删除表 `public.post_uploads` 上的索引 `index_post_uploads_on_post_id`。  
> > 原因：该索引已被 `idx_unique_post_uploads` 覆盖。

对于上述“删除”建议，建议您谨慎对待。我们认为这主要影响的是数据库总体大小，而非提升性能。例如：我们的整个数据库约为 120GB，而所有这些建议释放的空间仅为 422MB。Azure 本身也将影响定义为“低”。因此，这似乎仅仅是一次清理操作。

如上所述，我分享这些信息是希望它能帮助您在性能调优方面略作改进。除了这些索引外，在我们使用 Azure 服务期间，Azure 未提供其他任何建议。

此致  
Sascha

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [2020年二月11日 07:34 UTC](https://meta.discourse.org/t/database-performance-recommendations-by-azure-psql/141166/2 "2020-02-11T07:34:19Z")

</div>

感谢分享，其中一些建议有点奇怪……

```plaintext
CREATE INDEX index_topics_on_category_id ON public.topics USING btree (category_id)
CREATE INDEX index_topics_on_category_id_and_id ON public.topics USING btree (category_id, id)
CREATE INDEX index_topics_on_id_and_category_id ON public.topics USING btree (category_id, id)

```

它建议的这种重复三次的索引选择性极低。这类索引的问题在于，查询规划器通常会正确地忽略它们。如果只有 10 个不同的值，你需要将其与其他字段（例如 `topic_id`）组合使用。

至于未使用的索引，大约六个月前，我们曾对数据库进行统计分析，查找基础设施中未使用的索引。我们确实删除了几个，但这个帖子提醒我们，有必要再次执行这一流程。

感谢发布此内容。

---

<div class="post-metadata">

### Author: ![klopsknoedel](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/klopsknoedel/32/194126_2.png) [@klopsknoedel](https://meta.discourse.org/u/klopsknoedel)
#### Post date: [2020年二月11日 09:10 UTC](https://meta.discourse.org/t/database-performance-recommendations-by-azure-psql/141166/3 "2020-02-11T09:10:26Z")

</div>

> [@sam](#):
>
> 这个三重重复索引

感谢您的回复并指出这三个索引。我此前并未注意到这个三重重复，因为这些建议并非一次性出现，而是我在数周内分步应用的。  
即使它们没有出现在 `DROP` 建议中，这也相当奇怪。看来 Azure 还有一些工作要做 😃（我不得不将那些建议检查两遍）。

此致  
敬礼
