百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文
SQL 的核心目标是 高效获取每个分组中最新时间对应的记录

SQL 的核心目标是 高效获取每个分组中最新时间对应的记录

  • 网站名称:SQL 的核心目标是 高效获取每个分组中最新时间对应的记录
  • 网站分类:技术文章
  • 收录时间:2025-09-04 00:22
  • 网站地址:

进入网站

“SQL 的核心目标是 高效获取每个分组中最新时间对应的记录” 网站介绍

根据您的需求,优化 SQL 的核心目标是 高效获取每个分组中最新时间对应的记录。在不使用 CTE 的情况下,推荐以下两种优化方案:

方案 1:ROW_NUMBER() 窗口函数(推荐)

```sql

SELECT cTK_State, cTaskType, cCreateTime

FROM (

SELECT

cTK_State,

cTaskType,

cCreateTime,

ROW_NUMBER() OVER (

PARTITION BY ExtendField3, cTK_State, cTaskType

ORDER BY cCreateTime DESC

) AS rn

FROM Table_Task

WHERE ExtendField3 = 'SG240126004'

) AS t

WHERE rn = 1;

```


优化点:

1. 精准定位最新记录

`ROW_NUMBER()` 为每组数据按时间倒序编号 (`rn=1` 即最新记录),避免 `GROUP BY` 的聚合计算开销。

2. 分区逻辑匹配需求

`PARTITION BY ExtendField3, cTK_State, cTaskType` 确保分组条件与原始查询一致。

3. 性能优势

若存在索引 `(ExtendField3, cTK_State, cTaskType, cCreateTime DESC)`,效率显著高于聚合查询。


方案 2:关联子查询(兼容低版本)

```sql

SELECT

t1.cTK_State,

t1.cTaskType,

t1.cCreateTime

FROM Table_Task t1

WHERE t1.ExtendField3 = 'SG240126004'

AND t1.cCreateTime = (

SELECT MAX(cCreateTime)

FROM Table_Task t2

WHERE

t2.ExtendField3 = t1.ExtendField3

AND t2.cTK_State = t1.cTK_State

AND t2.cTaskType = t1.cTaskType

);


适用场景:

- 需兼容 SQL Server 早期版本(不支持窗口函数时)

- 数据量适中(避免全表扫描)


关键优化建议:

1. 索引优化

创建覆盖索引加速查询:

```sql

CREATE INDEX idx_optimizer

ON Table_Task (ExtendField3, cTK_State, cTaskType, cCreateTime DESC);

```

- 索引效果:通过包含所有查询字段和排序字段,减少 I/O 消耗 。


2. 避免 `GROUP BY` 陷阱

原始查询的 `GROUP BY` 会强制扫描所有分组数据,而上述方案仅提取目标行,效率更高 。


> 建议:优先选择 方案 1(窗口函数),兼顾性能与代码简洁性。