【发布时间】:2018-11-27 12:18:46
【问题描述】:
我有一个包含 116,317,979 条记录的表 (A),并且它每天以每天大约 750,000 条记录的速度增长。
根据我的要求,我想使用日期列有效地从表中获取最后 3 天的数据(日期时间存储在列中)。所以查询将是
select * from A where date_column >= trunc(sysdate) - 3
我还需要将表 A 与表 B 连接起来,这样
select * from A
left outer join B
on A.X = B.X and A.Y = B.Y and A.Z = B.Z and B.M = 'XYZ' and B.N = 'UIM'
where A.date_column >= trunc(sysdate) - 3
表 B 的唯一索引 & PK (X,Y,Z,M,N)
表 A (ID) 的唯一索引 & PK
表 A 上的建议 IDX 1 (date_column)
表 A (X,Y,Z) 上的建议 IDX 2
Time without Indexes 34 sec
Time with IDX 1 32 sec
Time with IDX 1 & 2 27 sec //Sorry about the mistype
通过仅在 A.date_column 上添加索引,我认为我可以显着提高性能,但我的测试结果是否定的。除了添加新索引之外,还有其他提示可以提高性能吗?从长远来看,添加这样的索引有什么害处吗?
或
最好创建另一个表并以某种方式在其中填充最近 3 天的数据(使用 db 触发器)。我可以轻松地使用另一个流程来每晚清除超过 3 天的数据。
提前致谢。
【问题讨论】:
标签: sql performance oracle11g