高效地从每组中选择一行
在拥有数百万条记录的大型产品表中,优化查询对于性能至关重要。常见的场景是根据特定列(例如每个商店的最大 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
该查询在子查询中执行分组和聚合,从而得到更好的结果
其他性能提示:
多行选择:
如果需要从每个组中检索多行,可以使用以下查询:
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中文网其他相关文章!