选择列最大值和该行对应数据的最有效方法

时间:2018-11-01 17:46:29

标签: sql sql-server performance

首先,我有以下查询。我知道它可以工作并产生我想要的结果,但是可以以更快/更有效的方式完成,因为它可能会处理大量数据以查找我想要返回的内容。

(以下示例中的ID为自动递增PK字段)

select x, y, z
from table
where id = (select max(id) from table where z = someValue)

2 个答案:

答案 0 :(得分:2)

我建议:

select top (1) x, y, x
from table
where z = somevalue
order by id desc;

为了提高性能,您希望在(z, id)上建立索引。

答案 1 :(得分:1)

我喜欢为此使用CTE,因为您可以对源表和CTE进行INNER JOIN

;WITH LookupCTE AS 
(
    select id = MAX(id) 
    FROM table 
    WHERE z = someValue
)
SELECT x, y, x
from table t1
INNER join LookupCTE t2 ON t1.id = t2.id