2012-01-09 18 views
1
SELECT  dteRun,     
CASE WHEN coalesce(nPriorityCode,0) <= 0 THEN 3 
       ELSE nPriorityCode 
       END AS nPriorityCode, 
       CASE WHEN sCommand IN ('DiaryWF','XC_Reminder') THEN '*' 
       ELSE '' 
       END as Alert, 
       sParentRef, 
       nWorkflowTypeCode, 
       sSubjectName, 
       sDescription, 
       sUniqueRef, 
       sUserInfo, 
       sUserInfo2 
FROM AuroraTasksDiaryView ad 
    INNER JOIN UserAuthority 
     ON UserAuthority.UserName = ad.sOwningUser 
     AND ad.sOwningUser = 'ammonsd' AND ad. nErrorCode = -1 
     AND ad.sExcludedUser <> ad.sOwningUser 
     AND UserAuthority.FunctionCode = ad.sFunctionCode 
     AND ((UserAuthority.LowerBound <= ad.nTaskValue 
     AND UserAuthority.UpperBound >= ad.nTaskValue) 
     OR ad.sFunctionCode = 'RTS') 
     AND RowNum <= 100 
     ORDER BY dteRun 

「Order By dteRun」クエリを実行すると、ミリ秒単位で実行されますが、Order By節では1分以上かかります。注文句による問題は何ですか?Order By節がSQLで時間がかかりすぎる

+0

質問を書いていたときに、テキスト領域の下にそのプレビューがありました。質問を投稿する前にそれを見て、正しくマークアップされていることを確認してみる価値があります。それを掲示したことも、それでも正しいことが見えることを見ておく価値があります。物をマークアップする正しい方法については、テキスト領域の上にある** [?] **リンク、または実際にその右側に書かれているクイックフォーマットのヒントを参照してください。あなたがあなたの質問に力を入れればするほど、答えは良くなります。 –

答えて

4

おそらくdteRun列にはインデックスがありません。列に速くORDER BYを実行する場合は、インデックスが必要です。

+0

私は1つがdteRun(日付タイプ)で、3つのフィールドにインデックスを共有しました。もう1つは日付タイプと数字タイプです。私はspteateインデックスをdteRunに使うべきですか? – sns

+0

はい。複合インデックスはここで助けになりません。 –

+0

@アーネスト・フリードマン・ヒルありがとう – sns

1

Order By節の列のインデックスは、同じ順序であることが好ましいです。

関連する問題