我试图优化我的SQL查询和我总是回到这个问题,我希望能得到一些见解,我怎么能最优化此。
为了简便起见,可以说我有一个简单的员工表:
tbl_employees
Id HiredDateTime
------------------
1 ...
2 ...
已版本信息在另一个另一个表为每个员工:
tbl_emplyees_versioned
Id Version Name HourlyWage
-------------------------------
1 1 Bob 10
1 2 Bob 20
1 3 Bob 30
2 1 Dan 10
2 2 Dan 20
这是最新版本的记录是如何在一个视图中检索:
Select tbl_employees.Id, employees_LatestVersion.Name, employees_LatestVersion.HourlyWage, employees_LatestVersion.Version
From tbl_employees
Inner Join tbl_employees_versioned
ON tbl_employees.Id = tbl_employees_versioned.Id
CROSS APPLY
(SELECT Id, Max(Version) AS Version
FROM tbl_employees_versioned AS employees_LatestVersion
WHERE Id = tbl_employees_versioned.Id
GROUP BY Id) AS employees_LatestVersion
为了得到这样的回应:
Id Version Name HourlyWage
-------------------------------
1 3 Bob 30
2 2 Dan 20
当拉有超过500名员工记录,每个有一对夫妇几个版本的查询,此查询开始哽咽起来,需要几秒钟才能运行。
有一对夫妇的罢工马上蝙蝠,但我不知道如何克服它们。
显然,跨应用增加了一些性能损失。 有没有像这样的版本化信息处理时,最好的做法? 有没有更好的方式来获得只是一个最高版本记录?
该版本表没有一个聚集索引beause没有标识或版本是唯一的。 连接到一起,他们会是这样,但它不喜欢的工作。 取而代之的是ID的非聚集索引,另一个用于版本。 有没有指标更好的方法此表来获得任何性能提升? 将索引视图真正帮助吗?