sql - 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) 创建复合索引变得更快。会做更多的测试,看看。
解决方案
推荐阅读
- r - R中带有gg图的堆叠密度图
- charts - 在 yAxis 中显示带有缩略图而不是标签的条形图
- python - Selenium chromedriver goog:python中的chromeOptions?
- php - 在没有控制器的情况下从 routes.yaml 返回响应
- php - smarty 模板的 UTF-8 字符编码问题
- python - 使用 python 将多个 CSV 内容编译到电子邮件正文中
- java - 一对多关系中的两个休眠
- sas - 用空格和长度 ge 32 个字符重命名 SAS 变量
- xml - 术语:XML 模式与 XML 应用程序
- ssrs-tablix - 在 tablix 中反映 DataSet 更新