优化SQL查询执行计划

时间:2019-06-04 17:58:13

标签: sql sql-server sql-server-2008 sql-server-2012 sql-server-2008-r2

我需要优化视图查询,

以下是视图中使用的查询之一:

SELECT * FROM <tablename> 
WHERE (2=(SELECT value FROM dbo.version WHERE a=<somevalue>))

尽管它的执行次数显示为0,但是在扫描<tablename>时它的成本为19%

如何优化其执行计划?

如果我按如下所示运行查询,则会得到0%的费用

SELECT * FROM <tablename> WHERE (2=(1))

这是视图:

CREATE   VIEW v1
AS
SELECT * FROM t1 WHERE (1=(SELECT value FROM config WHERE year=2019))
UNION ALL
SELECT * FROM t2 WHERE (2=(SELECT value  FROM config WHERE year=2019))
GO

当前t1和t2都在实际执行计划中,但是如果ist select为true,我想不对第二选择进行评估,反之亦然

1 个答案:

答案 0 :(得分:0)

根据<PAGE_ID>/feed?fields=likes.summary(true),comments.summary(true) 的内容,您也许可以像这样重写它:

version

如果这导致结果集中重复,则APPLY可能会有所帮助。但是,对于查询优化器是否会做得更好,我还没有很好的认识:

SELECT t.* 
FROM <tablename> t
INNER JOIN dbo.version v ON v.value = 2 AND a=<somevalue> 

您可能还需要根据SELECT t.* FROM <tablename> t CROSS APPLY (SELECT TOP 1 v.value FROM dbo.version v WHERE v.value = 2 AND a=<somevalue>) z 列的含义进行调整。