Mysql 加速 max() group by

ken*_*yuk 5 group-by max

我有一个简单的查询分组行需要 0.0045 秒。300.000 行

SELECT cid FROM table GROUP BY cid

当我添加 MAX() 进行查询时,返回需要 0.65 秒。

SELECT MAX(id) id, cid FROM table GROUP BY cid

我怎样才能加快这个查询?该查询在我的本地主机上运行以进行测试。id = 主键,我在 cid 上有索引。

Eug*_*eck 5

原因是两个查询之间的差异:

  • 您的第一个查询永远不会触及表 - 它仅依赖于索引
  • 您的第二个查询实际上需要命中所有行

因此,为了回到更优化的第一种情况,您需要一个索引,它可以提供以下两种功能:按 cid 和最小/最大 id 分组。您可以尝试通过在 (cid,id) 上创建索引来实现此目的


mar*_*ton 1

我会尝试在 cid 和 id 上添加复合索引。这可能会取代 cid 上的现有索引。我建议您分析一些典型的查询来评估增加现有索引大小的影响。复合索引恰好包含满足查询所需的数据,因此应最大限度地减少所需的工作。

MySQL 使用基于成本的优化。成本计算基于 I/O 量,因此,如果您可以仅在感兴趣的列上放置索引,则应该最大限度地减少 I/O 并实现最佳查询。