首页 文章

具有大量查找的大型Oracle表的索引和分区的最佳组合?

提问于
浏览
1

我有一个基因组数据的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, AssayIDSample 是外键 .

  • 假设对于每个 Sample 值,有~50k行 .

  • 每个 AssayIDSample 恰好出现一次 .

  • Mutation 是相对随机的, Call 可以是三个值之一 .

  • 此表上的查询可以使用 AssayIDSampleMutationCall 中的任何一个或组合,或通过 AssayIDSample 链接表中的值 .

一个典型的查询:

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'
  • 针对这些表的查询始终连接多个较小的表 .

  • WHERE 语句通常会过滤多列上的数据,但绝不会只过滤基本数据表中的数据 .

在选择所有列时,如何设计表以获得最佳查询性能?
我只使用索引,仅使用分区,还是两者的组合?磁盘空间和插入/更新性能不是问题 .

2 回答

  • 1

    在使用不同的索引和分区组合创建表的大量测试副本,并使用广泛的查询选择运行一系列性能分析后,我认为这个问题没有一个简单的答案 . 每种情况都不同,这个问题的范围对于这个论坛而言过于宽泛 . 感谢大家的反馈,这一切都很有帮助 .

  • 0

    作为第一步,您可以运行Oracle的SQL Access Advisor并查看它提供的建议 .

相关问题