小编Vat*_*lav的帖子

即使新查询的逻辑读取比旧查询少,它也更慢

我在存储过程中有一个查询,它必须列出一个范围内的所有日期,并从表中加入日期(如果当天存在的话)。

这个过程是在我成为DBA之前创建的,所以我想我可以优化一下。但是,我似乎碰到了一堵砖墙,我不明白为什么。

过程的当前实现从两个普通表(我们称它们为 TableA 和 TableB)中作为派生查询(在 FROM 子句中)中选择数据,然后将其作为 RIGHT JOIN 放在上面:

RIGHT JOIN (
     SELECT DATEADD(DAY,number,@DateFrom) AS DATE
     FROM (
         SELECT DISTINCT number
         FROM master.dbo.spt_values
         WHERE name IS NULL
     ) n
     WHERE DATEADD(DAY,number,@DateFrom) <= @DateTo
) AS y ON derived.Date = y.Date -- "derived" is an alias of the derived query
Run Code Online (Sandbox Code Playgroud)

由于在多个过程中使用了相同的代码,我想我会创建一个日期从 2005-01-01 到 2039-01-01 的表:

CREATE TABLE Dates(
     [Date] DATE NOT NULL PRIMARY KEY
)
Run Code Online (Sandbox Code Playgroud)

该表是从具有日期维度的仓库中填充的。

所以,我写的不是那个 RIGHT JOIN,而是:

FROM Dates d
LEFT JOIN derived ON derived.Date …
Run Code Online (Sandbox Code Playgroud)

sql-server optimization statistics

6
推荐指数
1
解决办法
1338
查看次数

标签 统计

optimization ×1

sql-server ×1

statistics ×1