我试图优化我 SQL 查询, 我总是回来 回到这个问题, 我希望得到一些洞察力 如何我可以 最佳优化这一点。
简洁的说,我有一个简单的雇员表:
< 强> tbl_ 雇员 < / 强 >
Id HiredDateTime
------------------
1 ...
2 ...
这在另一个表格中为每个雇员提供了以下信息:
< strength> tbl_ enderen- version streng> 用户名: <% 1\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
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多名员工记录的查询时, 每位员工都有几个版本, 这个查询开始窒息, 需要几秒钟才能运行。
球棒上有一对夫妇罢工 但我不确定如何克服他们
显然,Cross Apper增加了一些性能损失。 处理这种版本信息是否有最佳做法? 是否有更好的方法获得最高版本的记录?
版本的表格没有集成索引, 无论是Id还是版本, 都不是独一无二的。 将组合成一组, 但不会这样工作 。 相反, ID 和 版本有非集成索引 。 是否有更好的方法将这个表格索引化, 以获得任何绩效收益? 索引化的视图是否真的有用?