【发布时间】: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