2.26 亿条记录的查询性能问题
Query performance issue with 226 million records
我们 table 有 2.26 亿条记录。
table 有旅行 ID 和修订的复合主键
每个旅行id下的记录修订最大值接近5000。
现在查询如下
select * from
(select * from travel
where travel_id=xxxx
order by travel_date desc)
where rownum <= 5;
此查询将在 20 秒内运行。
我们的 SLA 低于 5 sec.So 在 travel_id 上创建了分区索引,每个索引的范围为 250000。(我们的旅行 ID 最大为 3200 万)
这让我在 2 秒内得到了结果。
但是由于 no:of table 记录在每个分区范围内分布不均匀,我打算安排索引号,以便每个分区下的记录数相等。
分区范围根据每个 travel_id.But 下的记录数而变化,现在我有更长的 运行 时间 9 秒。
我只是想知道我用来证明为什么具有相等范围的索引比具有不等范围但相同数据大小的索引分区工作得更快的这两种方法之间的区别是什么?
请指教
对于那种形式的查询,我不会考虑分区:(travel_id、travel_date desc) 上的索引应该在亚秒级时间内获取行。
为了进一步改进,您可能会努力对基于 travel_id 和 travel_date 的值进行物理聚类,使用聚类或索引组织的 table,但这可能对系统的其余部分产生影响。
我们 table 有 2.26 亿条记录。
table 有旅行 ID 和修订的复合主键
每个旅行id下的记录修订最大值接近5000。
现在查询如下
select * from
(select * from travel
where travel_id=xxxx
order by travel_date desc)
where rownum <= 5;
此查询将在 20 秒内运行。
我们的 SLA 低于 5 sec.So 在 travel_id 上创建了分区索引,每个索引的范围为 250000。(我们的旅行 ID 最大为 3200 万) 这让我在 2 秒内得到了结果。 但是由于 no:of table 记录在每个分区范围内分布不均匀,我打算安排索引号,以便每个分区下的记录数相等。 分区范围根据每个 travel_id.But 下的记录数而变化,现在我有更长的 运行 时间 9 秒。
我只是想知道我用来证明为什么具有相等范围的索引比具有不等范围但相同数据大小的索引分区工作得更快的这两种方法之间的区别是什么?
请指教
对于那种形式的查询,我不会考虑分区:(travel_id、travel_date desc) 上的索引应该在亚秒级时间内获取行。
为了进一步改进,您可能会努力对基于 travel_id 和 travel_date 的值进行物理聚类,使用聚类或索引组织的 table,但这可能对系统的其余部分产生影响。