0

私はインデックスの初心者です。実行に時間がかかりすぎるこのSQL式のインデックスを作成したいので、どの正確な列にインデックスを作成する必要がありますか?私はDB2dbを使用していますが、質問は非常に一般的だと思います。

私のSQL式は次のとおりです。

select * from incident  where (relatedtoglobal=1) 
and globalticketid in (select ticketid from INCIDENT where status='RESOLVED')
     and statusdate <='2012-10-09 12:12:12'

この5列でインデックスを作成する必要がありますか?

ありがとう

4

1 に答える 1

2

あなたの質問:

select * 
from incident  
where relatedtoglobal = 1 
  and globalticketid in ( select ticketid 
                          from INCIDENT 
                          where status='RESOLVED'
                        )
  and statusdate <='2012-10-09 12:12:12' ;

そして、内部のサブクエリ:

select ticketid 
from INCIDENT 
where status='RESOLVED'
  • インデックスを(status, ticketid)付けると、サブクエリの評価、つまりクエリの効率が確実に向上します。

  • クエリでは、前のインデックスに加えて、もう1つのインデックスが必要になります。で(relatedtoglobal, globalticketid)十分かもしれません。

DB2エンジンで、より複雑な索引付けを使用できるかどうかはわかりません。

  • (relatedtoglobal, globalticketid) INCLUDE (statusdate)またはのように

  • 2つのインデックス、1つはオン(relatedtoglobal, globalticketid)、もう1つはオン(relatedtoglobal, statusdate)


DB2のドキュメントは読みやすいものではありませんが、多くの詳細があります。CREATEINDEXステートメントとImplementingIndexesから始めます。

于 2012-10-09T10:08:15.093 に答える