oraclesql中时态表查询的性能问题

0h4hbjxa  于 2021-07-24  发布在  Java
关注(0)|答案(0)|浏览(214)

你能告诉我如何优化我的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实际上是某些表的生产数据库中的主键。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题