そのリストのすべての項目が間違っています。
(少なくともOracle 11gR2の場合、おそらく10gも同様です。このリストは、一部の廃止されたバージョンのOracleでは正確な場合があります。)
可能な限り、Oracleの公式ドキュメントを使用することをお勧めしますが、並列実行の章はあまり正確ではありません。
また、マニュアルが間違っていなくても、並列実行は非常に複雑であるため、誤解を招くことがよくあります。すべてのドキュメントを調べると、並列処理の程度を決定する約30の異なる変数があることがわかります。アイテムの短いチェックリストを見たことがあれば、非常に懐疑的であるはずです。これらのチェックリストは通常、非常に具体的な状況で検討するのに最も関連性の高い項目です。
例:
SQL> --Create a table without any parallel settings
SQL> create table parallel_test(a number primary key, b number);
Table created.
SQL> --Create some test data
SQL> insert into parallel_test
2 select level, level from dual connect by level <= 100000;
100000 rows created.
SQL> commit;
Commit complete.
SQL> --Force the session to run the query in parallel
SQL> alter session force parallel query;
Session altered.
SQL> --Generate explain plan
SQL> explain plan for
2 select a
3 ,(
4 select a
5 from parallel_test parallel_test2
6 where parallel_test2.a = parallel_test.a
7 )
8 from parallel_test;
Explained.
SQL> select * from table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------
Plan hash value: 3823224058
---------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
---------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 116K| 1477K| 9 (0)| 00:00:01 | | | |
|* 1 | INDEX UNIQUE SCAN | SYS_C0028894 | 1 | 13 | 1 (0)| 00:00:01 | | | |
| 2 | PX COORDINATOR | | | | | | | | |
| 3 | PX SEND QC (RANDOM) | :TQ10000 | 116K| 1477K| 9 (0)| 00:00:01 | Q1,00 | P->S | QC (RAND) |
| 4 | PX BLOCK ITERATOR | | 116K| 1477K| 9 (0)| 00:00:01 | Q1,00 | PCWC | |
| 5 | INDEX FAST FULL SCAN| SYS_C0028894 | 116K| 1477K| 9 (0)| 00:00:01 | Q1,00 | PCWP | |
---------------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - access("PARALLEL_TEST2"."A"=:B1)
Note
-----
- dynamic sampling used for this statement (level=2)
21 rows selected.
SQL>
並列ヒント、並列オブジェクト、全表スキャン、複数のパーティションにまたがるインデックス範囲スキャン、およびスカラーサブクエリはありません。
満たされた条件は1つではありません 、それでもクエリは並列処理を使用します。 (v$px_process
も確認しました クエリが実際に並列処理を使用していることを確認します。これは単なる説明プランの失敗ではありません。)
これは、他の質問に対する答えが間違っていることを意味します。
その場合に何が起こっているのか正確にはわかりませんが、それはFAST DUAL
に関係していると思います 最適化。一部のコンテキストでは、DUALはテーブルとして使用されないため、並列化するものはありません。これはおそらく「バグ」ですが、DUALを使用している場合は、とにかく並列処理は必要ありません。 (デモンストレーションの目的でDUALを使用したと想定していますが、実際のクエリはより複雑です。その場合は、より現実的な例でクエリを更新する必要があります。)