在较大的桌子上(大约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
索引与where
,filesort
和temp
。
提前谢谢。
答案 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