【问题标题】:Query performance issue with 226 million records2.26 亿条记录的查询性能问题
【发布时间】:2015-07-26 19:50:34
【问题描述】:

我们有一个包含 2.26 亿条记录的表。

table 有一个复合主键 travel id 和 revision

每个 travel id 下的最大记录修订数接近 5000。

现在我们查询如下

select * from
(select * from travel
where travel_id=xxxx
order by travel_date desc)
where rownum <= 5;

此查询在 20 秒内运行。

我们的 SLA 低于 5 秒。因此在 travel_id 上创建了分区索引,每个索引的范围为 250000。(我们的旅行 ID 最大为 3200 万) 这给了我不到 2 秒的结果。 但是由于表记录的数量不是均匀分布在每个分区范围内,我计划安排索引号,以便每个分区下的记录数相等。 分区范围根据每个 travel_id 下的记录数而有所不同。但是现在我的运行时间更长了 9 秒。

我只是想知道这两种方法之间的区别是什么,我用来证明为什么具有相等范围的索引比具有不等范围但相同数据大小的索引分区工作得更快?

请指教。

【问题讨论】:

  • 考虑在(travel_id,travel_date) 上创建一个复合索引,它最适合这个具体查询。
  • 非常感谢 Kordirko.. 它成功了!!!!

标签: oracle performance global partition


【解决方案1】:

对于这种形式的查询,我不会考虑分区:(travel_id, travel_date desc) 上的索引应该在亚秒时间内获取行。

为了进一步改进,您可能会根据 travel_id 和 travel_date 使用集群或索引组织表对值进行物理集群,但这可能会对系统的其余部分产生影响。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-13
    • 1970-01-01
    • 2023-03-23
    • 2012-09-17
    • 2011-07-14
    • 1970-01-01
    • 2014-09-20
    • 2014-07-09
    相关资源
    最近更新 更多