SQL“或”导致超时
在本地,此查询运行良好使用联接而不是IN子句 1选择*将显示所有列/数据,并占用大量时间。2当使用left join时,您可能只关注右表中不存在的数据,然后必须在left join语句中指定筛选器,而不是where子句。3并且您的where子句可能应该只过滤右表中的空值,原则上您希望知道左表中是否没有任何匹配项。4并尝试显式地在上使用内部连接,而不是通过where子句连接到它。连接优化SQL“或”导致超时,sql,timeout,conditional,union,Sql,Timeout,Conditional,Union,在本地,此查询运行良好使用联接而不是IN子句 1选择*将显示所有列/数据,并占用大量时间。2当使用left join时,您可能只关注右表中不存在的数据,然后必须在left join语句中指定筛选器,而不是where子句。3并且您的where子句可能应该只过滤右表中的空值,原则上您希望知道左表中是否没有任何匹配项。4并尝试显式地在上使用内部连接,而不是通过where子句连接到它。连接优化 select * from foo_main A with(nolock) where a.i = a.i a
select *
from foo_main A with(nolock)
where a.i = a.i
and (IsNull(A.v, '0') = '1')
and (IsNull(A.d, '') = 'CODE_B')
and A.c in ('CODE_B')
AND (a.p = '123456789' or
a.p IN (SELECT DISTINCT f.ui
FROM foo_faculty f
LEFT JOIN foo_unit ff ON (f.ui = ff.ui)
LEFT JOIN unit u ON (ff.ui = u.ui AND
f.c = u.c),
foo_Personnel p, foo_System s, unit u1
WHERE s.P = p.P
AND s.s = 'G'
AND s.R = 'R4'
AND p.ui = '1q2w3e4r5t6y'
AND p.ui = u1.ui
AND p.i = u1.i
AND u.i = u1.i
AND u.dI LIKE u1.DI + '%' COLLATE
SQL_Latin1_General_CP1_CS_AS))
order by lname, fname