我需要优化视图查询,
以下是视图中使用的查询之一:
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,我想不对第二选择进行评估,反之亦然
答案 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
列的含义进行调整。