【发布时间】:2020-08-24 20:48:14
【问题描述】:
我在 PostgreSQL 中有一个大表(>2000 M 行),必须尽快查询。它代表生物样品中基因表达的测量值。问题是有时测量直接在基因上(“探针”然后为 NULL),有时测量是通过基因的“探针”完成的(“基因”仍然设置)。一个基因可以有多个探针。没有其他表包含基因-探针关系。
CREATE TABLE "gene_measurements" (
"gene" INTEGER NOT NULL REFERENCES "genes" ON DELETE CASCADE,
"sample" INTEGER NOT NULL REFERENCES "samples" ON DELETE CASCADE,
"probe" INTEGER REFERENCES "probes" ON DELETE CASCADE,
"value" REAL NOT NULL
);
常见的查询包括获取给定样本中所有基因的表达,获取所有样本中给定基因/探针的表达,或获取给定样本中给定基因/探针的表达。
现在我有以下覆盖索引。它工作正常,但它非常占用空间。
CREATE INDEX "gene_measurements_gene_sample_value_index" ON "gene_measurements" ("gene", "sample", "value");
CREATE INDEX "gene_measurements_sample_gene_value_index" ON "gene_measurements" ("sample", "gene", "value");
CREATE INDEX "gene_measurements_sample_probe_value_index" ON "gene_measurements" ("sample", "probe", "value");
CREATE INDEX "gene_measurements_probe_sample_value_index" ON "gene_measurements" ("probe", "sample", "value");
在保持速度的同时,我可以做一些聪明的事情来获得更整洁和/或更小的实现吗?谢谢!
【问题讨论】:
标签: postgresql data-modeling database-indexes