そのlist内のすべての項目が間違っています。
(少なくともオラクル11gR2のため、同様にprobably10g。リストは、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>
いいえ平行ヒント、無平行オブジェクト、無フルテーブルスキャン、複数のパーティションにまたがるないインデックス範囲スキャン、およびスカラーサブクエリ。
単一の条件がと一致していないにもかかわらず、依然として並列処理が使用されています。 (私も、クエリが実際に並列処理を使用しないことを確認するv$px_process
を検証し、それだけで実行計画の失敗ではありません。)
これはあなたのother questionへの答えが間違っていることを意味します。
私はこの場合に起こっていることを正確にはわかりませんが、それはFAST DUAL
の最適化と関係があると思います。状況によっては、DUALは表として使用されないため、並列化するものはありません。これはおそらく「バグ」ですが、DUALを使用している場合は、とにかく並列性は望ましくありません。 DUALをデモンストレーションの目的で使用したと仮定していますが、実際のクエリがより複雑な場合は、より現実的な例を使用してクエリを更新する必要があります)。
サブクエリが'SELECT'リストしかし、あなたの最後の文は、SELECTリストにスカラ副問合せがないと言います。 'SELECT'リスト内でスカラー副問い合わせではない副問い合わせをどのように持つことができますか?そして、非並列実行プランを選択することがなぜ好ましいか尋ねていますか?なぜ並列処理が不可能なのか? –
@JustinCave - OPは、以前の質問に対するこの回答で引用したOracleのマニュアルを引用しています。 http://stackoverflow.com/a/9724227/146325彼らだけがフォーマットをうんざりし、プロセスの意味を変えました。 – APC
私は並列処理が不可能な理由を尋ねています – Revious