你能告诉我如何优化我的oracle(11g)数据库中的查询吗?
在我的数据库中,我有10个时态表(temporaltable_1到temporaltable_10),其中模式类似于:
Create table TemporalTable_1 (
Customer_ID number(8),
< Other columns>
valid_period_start timestamp,
valid_period_end timestamp,
period for valid_period(valid_period_start, valid_period_end)
)
每个表有以下两个索引和。。。
Create index ind_TemporalTable_1_ID on TemporalTable_1 (Customer_ID);
Create index ind_TemporalTable_1_Period on TemporalTable_1 (valid_period_start, valid_period_end);
... 某一特定日期的结果视图
Create or replace view TemporalTable_1_20200707 as
select
*
from
TemporalTable_1 as of period for valid_period to_date('20200707','yyyymmdd');
临时表2到临时表10也具有与临时表1相似的索引和视图。
现在,我创建了一个视图,将所有时态表连接在一起,截至2020年7月7日。
Crete view All_Temporals_20200707 as
select
*
from
TemporalTable_1_20200707 TT1
left join TemporalTable_2_20200707 TT2 on
TT2.Customer_id = TT1.Customer_id
left join TemporalTable_3_20200707 TT3 on
TT2.Customer_id = TT3.Customer_id
left join TemporalTable_4_20200707 TT4 on
TT3.Customer_id = TT4.Customer_id
left join TemporalTable_5_20200707 TT5 on
TT4.Customer_id = TT5.Customer_id
left join TemporalTable_6_20200707 TT6 on
TT5.Customer_id = TT6.Customer_id
left join TemporalTable_7_20200707 TT7 on
TT6.Customer_id = TT7.Customer_id
left join TemporalTable_8_20200707 TT8 on
TT7.Customer_id = TT8.Customer_id
left join TemporalTable_9_20200707 TT9 on
TT8.Customer_id = TT9.Customer_id
left join TemporalTable_10_20200707 TT10 on
TT9.Customer_id = TT10.Customer_id
我发现风景的表现很糟糕。我只是不知道如何提高查询的性能。“解释计划”的结果表明oracle不会使用这些索引。查看“所有临时文件”
我还修改了视图下的查询,如下所示
select /*+ INDEX(TemporalTable_1.IND_TemporalTable_1_PERIOD) */
*
from
TemporalTable_1 as of period for valid_period sysdate; -- today is 07 JUL 2020
然而,这没有什么区别。这意味着我创建的所有索引都没有被使用。
有谁能告诉我该怎么解决性能问题吗?
提前谢谢!
这里只是提供一些背景知识,这实际上是为了在ReportingServices的日常数据库中创建整个数据库的快照。“all\u temporals\u 20200707”实际上是对现实世界中某个报表的查询。这也意味着客户id实际上是某些表的生产数据库中的主键。
暂无答案!
目前还没有任何答案,快来回答吧!