如何优化从两个表中的一个或另一个获取的T-SQL查询

问题描述 投票:0回答:1

有两个相同的表。动态参数将确定从两个表中的哪个表中获取数据。我采用的方法是合并两个表的结果,并向每个子查询添加一个谓词,以对传入的参数进行过滤(请参见下文)。这样就产生了一个估计的执行计划,该计划将读取两个表,然后应用过滤器。有没有一种方法可以优化查询而不使用条件(例如IF),以便仅查询适当的表?

create table Flip (ID uniqueidentifier)
create table Flop (ID uniqueidentifier)

查询

declare @useFlip bit
select * from Flip where @useFlip=1
union
select * from Flop where @useFlip<>1

执行计划

enter image description here

tsql query-optimization sql-server-2014
1个回答
0
投票

我个人将转到动态语句或IF...ELSE逻辑。由于您只需要查询一个表,因此创建相关计划更为有意义。

动态方法:

DECLARE @SQL nvarchar(MAX);

SET @SQL = N'SELECT * FROM ' + QUOTENAME(CASE @UseFlip WHEN 1 THEN N'Flip' ELSE N'Flop' END) + N';';
EXEC sp_executesql @SQL;

IF...ELSE方法:

IF @UseFlip = 1
    SELECT * FROM Flip;
ELSE
    SELECT * FROM Flop;

编辑:上面的内容完全无效,因为OP在此答案下方进行了注释,以建议他们正在使用内联表值函数(此信息目前不在问题中)。这些语句均不能在iTVF中使用。

© www.soinside.com 2019 - 2024. All rights reserved.