首页 > 解决方案 > 优化 PostgreSQL 只读数据库

问题描述

我有一个大型 PostgreSQL 数据库,它实际上是只读的,除了非常罕见的批量更新。我可以做任何性能优化来利用它吗?例如,我可以/应该禁用可见性检查吗?

最大的表:

CREATE TABLE "gene_measurements" (
  "gene" INTEGER NOT NULL REFERENCES "genes" ON DELETE CASCADE,
  "sample" INTEGER NOT NULL REFERENCES "samples" ON DELETE CASCADE,
  "value" REAL NOT NULL
);
CREATE UNIQUE INDEX "gene_measurements_unique_1" ON "gene_measurements" ("sample", "gene") INCLUDE ("value");

一个典型的查询:

SELECT value WHERE gene = 1 AND sample = 2

和计划:

-------------------------------------------------------------------------------------------------------------------------------------------------------
 Index Only Scan using gene_measurements_gene_index on gene_measurements  (cost=0.57..4.59 rows=1 width=4) (actual time=63.621..63.621 rows=0 loops=1)
   Index Cond: ((sample = 2) AND (gene = 1))
   Heap Fetches: 0
 Planning Time: 0.156 ms
 Execution Time: 63.674 ms
(5 rows)

标签: postgresql

解决方案


如果相关数据是只读的,PostgreSQL 没有高级功能来加快查询速度。

如果应用程序知道如何使用这些信息,您可以获得潜在的重要性能改进:应用程序代码可能会尝试缓存相同查询的查询结果。您还可以在数据库中创建物化视图并修改应用程序代码以查询物化视图,而不是运行用于构建物化视图的查询。但在这两种情况下,您都需要修改应用程序代码。


推荐阅读