Sql 选择条件较慢的位置
在我看来,select语句(本身速度非常快)比将条件显式地写为字符串要慢。下面是一个虚拟示例: 快速版本:Sql 选择条件较慢的位置,sql,sql-server,tsql,Sql,Sql Server,Tsql,在我看来,select语句(本身速度非常快)比将条件显式地写为字符串要慢。下面是一个虚拟示例: 快速版本: select * FROM db.dbo.A left join db.dbo.B on A.id = B.id where A.selected_variable in ('XXX','YYY') 慢版本: select selected_variable into #t_temp from db.dbo.some_table where some_condition
select *
FROM db.dbo.A
left join db.dbo.B on A.id = B.id
where A.selected_variable in ('XXX','YYY')
慢版本:
select
selected_variable
into #t_temp
from db.dbo.some_table
where some_condition = 'X'
select *
FROM db.dbo.A
left join db.dbo.B on A.id = B.id
where A.selected_variable in (select selected_variable from #t_temp) -- returns ('XXX','YYY')
有人知道为什么以及什么是避免性能下降的最佳实践吗?您可以尝试以下版本,它可以避免额外的TempDB IO(这会降低性能) 此外,请查看所选的\u变量、某些\u表中的某些\u条件是否具有正确的索引
SELECT A.*
FROM dbo.A AS A
INNER JOIN DBO.some_table AS s
ON A.Selected_Variable = s.selected_variable
LEFT JOIN dbo.B AS B ON A.id = B.id
WHERE s.some_condition = 'X'
您可以尝试以下版本,这样可以避免额外的TempDB IO(这会降低性能) 此外,请查看所选的\u变量、某些\u表中的某些\u条件是否具有正确的索引
SELECT A.*
FROM dbo.A AS A
INNER JOIN DBO.some_table AS s
ON A.Selected_Variable = s.selected_variable
LEFT JOIN dbo.B AS B ON A.id = B.id
WHERE s.some_condition = 'X'
我认为性能透视图
EXISTS
优于IN
子句中的。因为
子句中的在内部转换为或
条件(导致更多条件)
尝试此脚本并比较查询执行计划和执行时间
select *
FROM db.dbo.A
left join db.dbo.B on A.id = B.id
where EXISTS (select 1
from db.dbo.some_table t
WHERE A.selected_variable = t.selected_variable AND some_condition = 'X')
我认为性能透视图EXISTS
优于IN
子句中的。因为
子句中的在内部转换为或
条件(导致更多条件)
尝试此脚本并比较查询执行计划和执行时间
select *
FROM db.dbo.A
left join db.dbo.B on A.id = B.id
where EXISTS (select 1
from db.dbo.some_table t
WHERE A.selected_variable = t.selected_variable AND some_condition = 'X')
这取决于索引。您可能想指出什么是正确的索引。这取决于索引。您可能想指出什么是正确的索引。