关于MySQL的GROUP BY / MIN查询的索引

时间:2013-01-06 14:00:04

标签: mysql sql performance group-by indexing

在较大的桌子上(大约5密耳行增长)我正在运行以下查询需要相当长的时间:

SELECT track, MIN(time) as t, buse, serviceid 
FROM depart 
WHERE `to` IS NOT NULL AND platform_id = 1025 AND time > 741 
GROUP BY serviceid

什么是支持快速运行此查询的好索引?到目前为止,它使用platform_id索引与wherefilesorttemp

提前谢谢。

2 个答案:

答案 0 :(得分:1)

正确的索引方法取决于数据的分布。如果只有一行的平台为1025,则情况与所有行的平台均为1025时不同。

做出合理的假设,你可能想要一个索引(平台,时间)。如果to通常为NULL,则索引(platform,to,time)可能是一种改进。

索引的使用方式是MySQL将在索引中找到满足where子句的值。然后,它将在每个页面中读取这些记录以获取其余变量并处理查询。假设有几百条记录符合标准,这应该可以显着加快查询速度。

答案 1 :(得分:0)

试试这个:s

SELECT track, MIN(time) as t, buse,DISTINCT serviceid 
FROM depart 
WHERE `to` IS NOT NULL AND platform_id = 1025 AND time > 741