我有一个简单的查询分组行需要 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 上有索引。
原因是两个查询之间的差异:
因此,为了回到更优化的第一种情况,您需要一个索引,它可以提供以下两种功能:按 cid 和最小/最大 id 分组。您可以尝试通过在 (cid,id) 上创建索引来实现此目的
我会尝试在 cid 和 id 上添加复合索引。这可能会取代 cid 上的现有索引。我建议您分析一些典型的查询来评估增加现有索引大小的影响。复合索引恰好包含满足查询所需的数据,因此应最大限度地减少所需的工作。
MySQL 使用基于成本的优化。成本计算基于 I/O 量,因此,如果您可以仅在感兴趣的列上放置索引,则应该最大限度地减少 I/O 并实现最佳查询。