0

我目前遇到了我的 Oracle 实例的问题。我有两个简单的选择语句:

select * from dog_vets  

select * from dog_statuses

和下面的小提琴

我的解释计划dog_vets如下:

 0 | Select Statement  
 1 | Table Access Full Scan dog_vets

我的解释计划dog_statuses 如下:

ID|Operation | Name | Rows |Bytes | cost | time    
0 | Select Statement |  | 20G | 500M | 100000 | 999:99:17  
1 | View  | index%_join_001 | 20G | 500M | 100000 | 999:99:17  
2 | Hash Join  |  | | | |   
3 | Hash Join  |  | | | |   
4 | Index fast full scan dog_statuses_check_up  |  | 20G | 500M | 100000 | 32:15:00  
5 | Index fast full scan dog_statuses_sick|  | 20G | 500M | 100000 | 35:19:00  

要获得这种类型的输出,请执行以下语句:

explain plan for   
select * from dog_vets;

或者

 explain plan for   
    select * from dog_statuses;

接着

select * from table(dbms_xplan.display);

现在我的问题是,为什么多个索引意味着在我的上述语句中创建了一个视图(我假设是物化的),以及我在这种类型的查询中遭受了什么样的性能影响?目前dog_vets有大约 3 亿条记录和dog_Statuses大约 5 亿条记录。我还没有能够select * from dog_statuses在 10 小时内返回。这主要是因为查询在完成之前就终止了。

DDL

如果 sql fiddle 死了:

create table dog_vets
(
     name varchar2(50),
     founded timestamp,
     staff_count number
  );

create table dog_statuses
(
      check_up timestamp,
      sick varchar2(1)
  );


create index dog_vet_name
on dog_vets(name);

create index dog_status_check_up
on dog_statuses(check_up);

create index dog_status_sick
on dog_statuses(sick);
4

1 回答 1

0

您可以尝试告诉优化器忘记索引

 SELECT /*+NO_INDEX(dog_statuses)*/ *
 FROM dog_statuses
于 2012-10-19T15:32:16.217 回答