Mysql加速max()组

时间:2012-09-06 22:17:10

标签: 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上有索引。

3 个答案:

答案 0 :(得分:4)

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

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

因此,为了回到更优化的第一种情况,您需要一个索引,它可以同时提供:cid和min / maxing id分组。您可以尝试通过在(cid,id)

上创建索引来实现此目的

答案 1 :(得分:1)

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

MySQL使用基于成本的优化。成本核算基于i / o的数量,因此,如果您可以仅对感兴趣的列放置索引,则应最小化i / o并导致最佳查询。

答案 2 :(得分:0)

查看mysql手册中有关加速max(),min()查询的内容

  

MySQL使用索引进行这些操作:

     

查找特定索引列的MIN()或MAX()值   key_col上。这是由检查您是否的预处理器优化的   正在使用WHERE key_part_N =常量发生的所有关键部分   在索引中的key_col之前。在这种情况下,MySQL只做一个密钥   查找每个MIN()或MAX()表达式并用a替换它   恒定。