1) 最初に確認することは、データベース パラメーターが Prod と Dev で同等かどうかです。コスト ベース オプティマイザーの決定に影響を与えるパラメーターの 1 つが異なる場合、すべての賭けは無効になります。パラメータは v$parameter ビューで確認できます。
2) オブジェクト統計を最新のものにすることは素晴らしいことですが、指摘した大きな違いに注意してください。Dev には Prod の行の 10% があります。この行数は、CBO がクエリを実行する最善の方法を決定する際に考慮されます。行数に大きな違いがあることを考えると、計画が同じになるとは思えません。
状況に応じて、オプティマイザーは 20,000 行 (Dev) のテーブルのフル テーブル スキャンを選択する場合があります。200,000 行 (Prod) のテーブルではインデックスのコストが低いと判断される場合があります。(デモンストレーションのためだけの数値です。CBO は、絶対値ではなく、FTS とインデックス スキャンの対象を決定するためにコスト計算アルゴリズムを使用します)。
3) システム統計も実行計画に組み込まれます。これは、CPU およびディスク I/O の特性を表す一連の統計です。両方のシステムのハードウェアが異なる場合、システム統計が異なると予想され、これが計画に影響を与える可能性があります。Jonathan Lewis からの良い議論はこちら
sys.aux_stats$ ビューを介してシステム統計を表示できます。
なぜ異なる計画があなたにとって悪いことなのかわかりません...統計が最新で、パラメーターが正しく設定されている場合、サイズの違いに関係なく、どちらのシステムからもまともなパフォーマンスが得られるはずです...
ただし、Prod システムから統計をエクスポートして、Dev システムにロードすることは可能です。これにより、Prod 統計が Dev データベースで利用できるようになります。
DBMS_STATS パッケージ、特に EXPORT_SCHEMA_STATS、EXPORT_SYSTEM_STATS、IMPORT_SCHEMA_STATS、IMPORT_SYSTEM_STATS プロシージャについては、Oracle のドキュメントを確認してください。10g/11g で午後 10 時の夜間統計ジョブを無効にする必要がある場合があることに注意してください... または、インポート後にロック統計を調査して、夜間ジョブによって更新されないようにすることができます。