我有一个简单的查询分组行,需要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上有索引。
答案 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替换它 恒定。