我有一个基因组数据的Oracle 10g数据库,其中有几个> 1亿个行表,看起来类似于以下内容:
ID AssayID Sample Mutation Call Frequency
101 12578 Sample01 T367G P 0.87
102 31384 Sample01 A2345C A 0.28
103 3453 Sample01 T247C P 0.67
104 12578 Sample02 G235del M 0.11
105 7868 Sample02 None P 0.98
ID
是唯一的PK,AssayID
和Sample
是外键。Sample
值,有大约50k行。 AssayID
只出现Sample
一次。 Mutation
相对随机,Call
可以是三个值中的一个。 AssayID
,Sample
,Mutation
,Call
中的任何一个或其组合,或通过{{链接表中的值1}}和AssayID
。 典型的查询:
Sample
select t.*
from this_table t
join assay_table a on t.assayid = a.assayid
join sample_table s on t.sample = s.sample
where
s.name = 'xxx' and a.gene in ('abc', 'xyz') and t.call = 'P'
语句通常会过滤多列上的数据,但从不仅来自基础数据表。如何在选择所有列时设计表格以获得最佳查询性能? 我只使用索引,仅使用分区,还是两者的组合?磁盘空间和插入/更新性能不是问题。
答案 0 :(得分:1)
作为第一步,您可以运行Oracle的SQL Access Advisor并查看它提供的建议。
答案 1 :(得分:0)
在使用不同的索引和分区组合创建表的大量测试副本,并使用广泛的查询选择运行一系列性能分析后,我认为这个问题没有一个简单的答案。每种情况都不同,这个问题的范围对于这个论坛而言过于宽泛。感谢大家的反馈,这一切都很有帮助。