postgresql - 优化 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 没有高级功能来加快查询速度。
如果应用程序知道如何使用这些信息,您可以获得潜在的重要性能改进:应用程序代码可能会尝试缓存相同查询的查询结果。您还可以在数据库中创建物化视图并修改应用程序代码以查询物化视图,而不是运行用于构建物化视图的查询。但在这两种情况下,您都需要修改应用程序代码。
推荐阅读
- sqlite - SQLite.TableQuery 成员访问未能编译表达式
- javascript - 图片库,显示带有背景图片的图片
- java - 构建器中某些字段的条件设置
- android - 尝试使用 JMeter 记录来自 android 应用程序的流量时没有互联网连接
- python - 使用python在图像上查找符号的位置
- elasticsearch - 在 Elasticsearch 7.4 上无法过滤某些属性。如何过滤它们?
- angular - 如何自定义 mat-paginator 下拉位置?
- python - 如何在 Python 中打印形状?
- javascript - Reactjs 中的 API 调用
- python - Run python script in jenkins