0

私は次のクエリを使用しています。このクエリでは、参照されているテーブルに5,000万以上のレコードがあります。履歴テーブルを作成することで、CPUパフォーマンスを向上させることができますか?または、パーティション以外のオプションはありますか。または、クエリプランの微調整が唯一のオプションですか?

SELECT MIN(minbkt),
       maxbkt,
       SUBSTRB(DUMP(MIN(val), 16, 0, 32), 1, 120) minval,
       SUBSTRB(DUMP(MAX(val), 16, 0, 32), 1, 120) maxval,
       SUM(rep) sumrep,
       SUM(repsq) sumrepsq,
       MAX(rep) maxrep,
       COUNT(*) bktndv,
       SUM(CASE
               WHEN rep = 1 THEN
                1
               ELSE
                0
           END) unqrep
  FROM (SELECT val,
               MIN(bkt) minbkt,
               MAX(bkt) maxbkt,
               COUNT(val) rep,
               COUNT(val) * COUNT(val) repsq
          FROM (SELECT
                /*+ no_parallel(t) no_parallel_index(t) dbms_stats cursor_sharing_exact use_weak_name_resl dynamic_sampling(0) no_monitoring */
                 "VERSION_LABEL" val,
                 NTILE(75) OVER(ORDER BY NLSSORT("VERSION_LABEL", 'NLS_SORT = binary')) bkt
                  FROM "User"."AUDITTRAIL" t
                 WHERE "VERSION_LABEL" IS NOT NULL)
         GROUP BY val)
 GROUP BY maxbkt
 ORDER BY maxbkt
4

1 に答える 1

2

これは、監査テーブルのversion_label列のヒストグラムの収集に関連するクエリのようです。

ほぼ確実に、そのようなヒストグラムが存在する必要はないことを期待します。統計収集を変更して、そのようなテーブルの単純な統計を収集することができます。ヒストグラムはありません。それを行う最良の方法は、バージョンと統計収集がトリガーされる方法に基づいていますが、それについてサポートが必要な場合は、質問を展開してそれらの詳細を含めるか、別の質問を開始してください。

于 2013-03-13T09:39:31.390 に答える