現在、Oracleインスタンスで問題が発生しています。2つの簡単なselectステートメントがあります。
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フィドルが死んだ場合:
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);