自我加入的替代方案

时间:2012-12-03 11:23:28

标签: sql tsql optimization relational-database

我有一个像这样引用自己的表:

Id   Total   Prev   Session
1  | 10    | NULL | 1
2  | 15    | 1    | 1
3  | 11    | NULL | 2
4  | 29    | 2    | 1
5  | 19    | 3    | 2
6  | 47    | 4    | 1

我需要了解具体会议的差异 对于会话1来说就像这样:

1. 10 -- None to 10
2. 5  -- 10 to 15
3. 14 -- 15 to 29
4. 18 -- 29 to 47

为此,我使用:

SELECT  F.Total - P.Total AS Difference
FROM    Foo F LEFT OUTER JOIN
        Foo P ON F.Prev = P.Id
WHERE   Session = @Session

哪个非常慢。
如何在不更改表格的情况下更快地检索这些差异?

1 个答案:

答案 0 :(得分:2)

你做不到。这是尽可能最快的查询,但如果您在SessionPrevId上添加索引可能会更快。