0

チーム、

以下のクエリを最適化する必要があります。このクエリを最適化する最善の方法を提案してください。条件の順序を変更してみましたが、列にインデックスを作成しました。うまくいきませんでした。提案を投稿してください。

参考までに、iemail_id は両方のテーブルのインデックスを持つ整数です。以下のクエリは 400 万件のレコードを返します。よろしくお願いします。

SELECT T.AId, M.iemail_id
FROM tasks T WITH(NOLOCK)
INNER JOIN tmail M WITH(NOLOCK)
ON T.iemail_id = M.iemail_id
WHERE ((status IN (5,6,8,9,14,15,21,22,23,24))
OR (status =7 AND T.lmodif >= '11-19-2012 00:00:00'))
AND (Ctype='Auto')
AND (Aitem in ('DATA', 'FILE'))
AND (T.lmodif >= '08-20-2012 00:00:00' AND M.mtime <= '11-28-2012 05:25:25')
4

1 に答える 1

0

lmodifmtime列がであると仮定して、文字列を最初DATETIMEに変換してみてください。DATETIME何かのようなものCONVERT(DATETIME, '2012-11-28 05:25:25', 120)

での最適化の機会はあまりありません((status IN (5,6,8,9,14,15,21,22,23,24)) OR (status =7 AND T.lmodif >= '11-19-2012 00:00:00')。あなたはまだそれを置き換えることを試みることができます:

(status BETWEEN 5 AND 9
 OR status IN (14, 15)
 OR status BETWEEN 21 AND 24)
AND (status <> 7 OR T.lmodif >= '11-19-2012 00:00:00')

しかし、正直なところ、それで何かが変わるとは思えません。

于 2012-11-28T10:46:15.980 に答える