【发布时间】:2016-01-08 08:11:05
【问题描述】:
我有一个很长的复杂 SQL 查询(在 Microsoft SQL Server 2012 中),我需要在其中提高性能。我有一个问题,SQL 查询在 from 语句之前有一个“select top 1”。很难解释,所以在这篇文章下面我写了一个关于这个问题的示例 SQL 查询:
select
Player.Firstname,
Player.Lastname,
LastGameGoals =
(select top 1 Goals
from PlayerSummary
where PlayerSummary.PlayerID = Player.PlayerId
order by PlayerSummaryId desc)
from Player
上面的 SQL 获取曲棍球运动员的名字和姓氏,以及特定球员在最后一场比赛中的进球数。由于数据库非常大,由于 select top 1-statement,它会变得非常慢。
我当然可以添加一个索引以获得更好的性能,但我可以避免在每个玩家行上执行“选择前 1”吗?
如何提高性能?
【问题讨论】:
-
那么,为什么没有索引呢?查询计划是否真的建议为每一行单独的
select top 1?这看起来很奇怪。 -
对于某些
TOP n查询,SQL 服务器存在缺陷。看到这个:dba.stackexchange.com/questions/143218/…
标签: sql performance sql-server-2012