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,请尝试将您的字符串转换为DATETIMEfirst 。就像是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 回答