首页 > 解决方案 > Oracle:按数据分布不均的索引列排序

问题描述

我有一个事务表,当数据在帐户中公平分布时,选择查询非常快地获取特定帐户的记录并按事务 ID 排序,例如:

select trans_id, account_no, file_content 
from  transactions_view 
where account_no =:accountNo 
order by trans_id

transaction_view 由事务表支持。transaction_view 是一个普通视图。account_no 和 trans_id 在表中被索引。

因此,如果我首先为帐户 (2) 交易添加 100 万条记录。然后我在账户 1 到 10 之间添加下一个百万交易。所以上面的选择查询对于账户 2 来说仍然很快(低 ms)。但是对于其他帐户,它变得非常慢 10s+。

有什么建议如何通过索引字段处理倾斜数据和排序数据,以提高查询在获取任何帐户时变得更快?

目前大约有 60 个帐户。我在 table 上的 account_no 上尝试了哈希分区。表在日期上也有范围分区

我注意到如果我将 order by 更改为 account_no, trans_id。并且使用 (account_no, trans_id) 创建复合索引变得更快。会做更多的测试,看看。

标签: sqloracleperformance

解决方案


推荐阅读