首页 > 数据库 > mysql教程 > 如何从大型数据库表中高效地选择每组一行?

如何从大型数据库表中高效地选择每组一行?

Barbara Streisand
发布: 2024-12-31 01:04:08
原创
274 人浏览过

How to Efficiently Select One Row per Group from a Large Database Table?

高效地从每组中选择一行

在拥有数百万条记录的大型产品表中,优化查询对于性能至关重要。常见的场景是根据特定列(例如每个商店的最大 ID)从表的每组中检索单行。

原始查询和性能问题:

用于此任务的初始查询是:

SELECT id, product_name, store_id
FROM product
GROUP BY store_id
ORDER BY id.
登录后复制

但是,由于分组和聚合,此查询面临性能问题

推荐方法:

一个有效的解决方案是使用子查询来确定每个商店的最大ID并将其连接到主表:

SELECT  a.*
FROM    tableName a
        INNER JOIN
        (
            SELECT  store_ID, MAX(ID) max_ID
            FROM    tableName
            GROUP BY store_ID
        ) b ON a.store_ID = b.store_ID AND
                a.ID = b.max_ID
登录后复制

该查询在子查询中执行分组和聚合,从而得到更好的结果

其他性能提示:

  • 确保表在 ID 和 store_id 列上有索引。
  • 考虑使用数据库支持并行化和优化的服务器

多行选择:

如果需要从每个组中检索多行,可以使用以下查询:

SELECT ID, product_Name, store_ID
FROM   tableName a
WHERE
  (
     SELECT COUNT(*) 
     FROM   tableName b
     WHERE  b.store_ID = a.store_ID AND b.ID >= a.ID
  ) <= 2;
登录后复制

此查询根据 ID 列从每个组中最多检索两行。

以上是如何从大型数据库表中高效地选择每组一行?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板