You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL单查询获取多唯一section值的最新记录

高效获取MySQL中多个section的最新访问日志条目

你完全可以用单条高效SQL实现需求,不需要导出整张表再在PHP里处理,下面是两种最优方案,性能拉满:

方案一:子查询关联(兼容所有MySQL版本)

利用主键id的唯一性(假设是自增主键,最新记录对应最大id),先找出目标section的最大id,再关联原表获取完整记录:

SELECT t.*
FROM your_table t
INNER JOIN (
    SELECT section, MAX(id) AS max_id
    FROM your_table
    WHERE section IN ('main', 'settings', 'xxx') -- 填入需要查询的section列表
    GROUP BY section
) AS sub ON t.id = sub.max_id

性能优化关键:

给section和id创建联合索引,让查询能快速定位目标数据,避免全表扫描:

CREATE INDEX idx_section_id ON your_table(section, id DESC);

方案二:窗口函数(MySQL 8.0+)

如果你的MySQL版本是8.0及以上,用窗口函数的代码更简洁,性能同样出色:

SELECT *
FROM (
    SELECT *,
           ROW_NUMBER() OVER (PARTITION BY section ORDER BY id DESC) AS rn
    FROM your_table
    WHERE section IN ('main', 'settings', 'xxx')
) AS t
WHERE rn = 1;

性能优化关键:

同样依赖上面提到的idx_section_id联合索引,MySQL会利用索引快速完成分组排序,只保留每组的第一条记录。

这两种方案的优势

  • 避免多次查询的连接开销,单条查询即可覆盖所有目标section
  • 不会拉取无关数据,仅返回每个section的最新一条记录,数据传输量极小
  • 基于索引的定位逻辑,查询速度极快,完全不用担心性能瓶颈

内容的提问来源于stack exchange,提问作者John Smith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 23:05:30