0

次の sybase クエリのパフォーマンスをどのように改善できるかがわかります。現在、約1.5時間かかります。

 CREATE TABLE #TempTable
 (
 T_ID numeric,
 M_ID numeric,
 M_USR_NAME char(10),
 M_USR_GROUP char(10),
 M_CMP_DATE datetime,
 M_CMP_TIME numeric,
 M_TYPE char(10),
 M_ACTION char(15),
 )


select
T.M_USR_NAME,
T.M_USR_GROUP,
T.M_CMP_DATE,
T.M_CMP_TIME,
T.M_TYPE,
T.M_ACTION
from #TempTable T, AUD_TN B
where T.M_ID=B.M_ID
and T.T_ID in 
(
   select M_NB from TRN H where (M_BENTITY ="KROP" or M_SENTITY = "KROP")     
)

UNION

select
A.M_USR_NAME,
A.M_USR_GROUP,
A.M_DATE_CMP,
A.M_TIME_CMP,
A.M_TYPE,
A.M_ACTION
from AUD_VAL A, TRN H
where A.M_DATE_CMP  >= '1 May 2012' and A.M_DATE_CMP <= '31 May 2012'
and A.M_ACT_NB0=H.M_NB
and (H.M_BENTITY ="KROP" or H.M_SENTITY = "KROP") 

UNION

select
TR.M_USR_NAME,
TR.M_USR_GROUP,
TR.M_DATE_CMP,
TR.M_TIME_CMP,
TR.M_TYPE,
TR.M_ACTION

from TRN_AUD TR, TRN H
where TR.M_DATE_CMP  >= '1 May 2012' and TR.M_DATE_CMP <= '31 May 2012'
and TR.M_ACT_NB0=H.M_NB
and (H.M_BENTITY ="KROP" or H.M_SENTITY = "KROP") 

DROP table #TempTable

どんな助けでも大歓迎です。次の点に注意してください

上記で索引付けされていない唯一のテーブルは AUD_TN です

乾杯RC

4

3 に答える 3

0

おそらく、一時テーブルにデータが取り込まれ、多くの行が含まれていますか?

temp にインデックスを付ける必要はありませんが、その部分のすべての結合でインデックスを使用する必要があります。

UNION の各部分を別々に試して、そのうちの 1 つが遅いかどうかを調べてみませんか?

SET SHOWPLAN ON でよろしいですか?おそらくそれもできる必要があると思います-Sybaseがインデックスを使用して正しく結合していることを確認できる必要があります。

TRN BENTITY と SENTITY - 索引付けされていますか? そうでない場合は、IN が少し遅くなりますが、Sybase が内部的にインデックスを作成するワークテーブルに単一のテーブル スキャンを実行しても問題ないかもしれません。代わりに EXISTS も使用してください。

2 番目の部分 - 両方とも SARGS を持っています (わからない場合は Sybooks で調べてください - 検索引数)。最初にスキャンされたテーブルの SARG では、2 番目にインデックス結合 (またはマージ結合) が表示されますが、インデックスを使用しています。

第 3 部 - 第 2 部と同様の議論。

第2部か第3部になると思います

于 2012-09-05T08:19:16.603 に答える
0

この問題がまだ解決していない場合: 1) sql batch set showplan on set noexec on の先頭でこれを試してください。

予想されるインデックスが SQL オプティマイザーによって取得されているかどうかを確認します。where 句の列にインデックスが存在しない場合は、作成してください。可能であればクラスター化インデックスを作成します。

2)最初のクエリでは、where句のサブクエリを次のように置き換えることができます

テーブル #T_ID を作成 ( M_NB データ型 )

#T_ID に挿入 TRN H から M_NB を選択 (M_BENTITY ="KROP" または M_SENTITY = "KROP")

where句を次のように変更します。

ここで、T.M_ID=B.M_ID および T.T_ID = #T_ID.M_NB

于 2017-02-15T17:41:05.353 に答える