2018.08.13
OPT ESTIMATE
目次
基本情報
ヒント
OPT_ESTIMATE
Syntax
/*+ OPT_ESTIMATE(query_block_name, operation[, …], options) */
サポート
10g ~
詳細
OPT_ESTIMATEヒントはOracle10gのSQL Tuning Advisorによって使用されます。SQL Tuning Advisorは、既存のクエリにOPT_ESTIMATEヒントを適用することにより、必要な実行計画を策定します。OPT_ESTIMATEヒントはCARDINALITYヒントに比べてはるかに多様な機能を提供します。したがって、既存で使っていたCARDINALITYを代わりにして使用することができます。詳細については、以下の例を参照してください。
一つ注意することはOPT_ESTIMATEヒントとCARDINALITYヒントは、すべてUndocumented Hint、すなわちOracleが正式にサポートしていないヒントということです。つまり、何の予告なしになくなったり使い方が変わることがあります。
使用例
explain plan for select * from t1 where c1 = :b1 ; -------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| -------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 5 | 2 (0)| | 1 | TABLE ACCESS BY INDEX ROWID| T1 | 1 | 5 | 2 (0)| |* 2 | INDEX RANGE SCAN | T1_N1 | 1 | | 1 (0)| -------------------------------------------------------------------------- -- 예측 로우수를 1000배로 확대 explain plan for select /*+ opt_estimate(table, t1, scale_rows=1000) */ * from t1 where c1 = :b1 ; -------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| -------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1000 | 5000 | 2 (0)| | 1 | TABLE ACCESS BY INDEX ROWID| T1 | 1000 | 5000 | 2 (0)| |* 2 | INDEX RANGE SCAN | T1_N1 | 1 | | 1 (0)| -------------------------------------------------------------------------- explain plan for select * from t2, (select * from t1) v where t2.c1 = v.c1 and t2.c2 = :b2 and v.c1 = :b1 ; ---------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| ---------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 11 | 3 (0)| | 1 | TABLE ACCESS BY INDEX ROWID | T1 | 1 | 5 | 1 (0)| | 2 | NESTED LOOPS | | 1 | 11 | 3 (0)| |* 3 | TABLE ACCESS BY INDEX ROWID| T2 | 1 | 6 | 2 (0)| |* 4 | INDEX RANGE SCAN | T2_N1 | 1 | | 1 (0)| |* 5 | INDEX RANGE SCAN | T1_N1 | 1 | | 0 (0)| ---------------------------------------------------------------------------- -- 조인 결과 수를 1000배로 확대 explain plan for select /*+ opt_estimate(join, (t2, v), scale_rows=100000) */ * from t2, (select /*+ no_merge */ * from t1) v where t2.c1 = v.c1 and t2.c2 = :b2 and v.c1 = :b1 ; ----------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| ----------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1000 | 32000 | 4 (0)| |* 1 | TABLE ACCESS BY INDEX ROWID | T2 | 1 | 6 | 2 (0)| | 2 | NESTED LOOPS | | 1000 | 32000 | 4 (0)| | 3 | VIEW | | 1 | 26 | 2 (0)| | 4 | TABLE ACCESS BY INDEX ROWID| T1 | 1 | 5 | 2 (0)| |* 5 | INDEX RANGE SCAN | T1_N1 | 1 | | 1 (0)| |* 6 | INDEX RANGE SCAN | T2_N1 | 1 | | 1 (0)| -----------------------------------------------------------------------------
関連情報
1. CARDINALITYヒント