使用ROUND()
函数时,MySQL是否使用任何索引?
考虑这个问题:
SELECT CPRID,ROUND(Dist*1000) AS `Distance`
FROM CPRaw_ID1
GROUP BY ROUND(1000*Dist)
ORDER BY ROUND(Dist*1000)
MySQL仍会在Dist
列上使用我的索引吗?
答案 0 :(得分:4)
首先,您可以使用EXPLAIN查看是否将在查询中使用Dist上的索引。我做了一个实验,发现事实并非如此。
实际上,建议是avoid using functions in where clause。此外,这解释了how mysql uses indexes。
在您发布的查询中,我认为您可以尝试创建另一个表并放置查询结果:
SELECT CPRID,ROUND(Dist*1000) AS `Distance`
FROM CPRaw_ID1
进入临时表并在Distance上构建索引。然后索引将用于加速查询。
答案 1 :(得分:0)
如果您以千米为单位存储值并且想要将其转换为米,我认为此查询就足够了:
SELECT CPRID, ROUND(Dist*1000, 2) AS `Distance`
FROM CPRaw_ID1
GROUP BY Dist
ORDER BY Dist
以这种方式,如果定义Dist的索引,则可以使用索引。 ROUND函数的第二个参数将标识您需要的小数位,如果将其设置为0则没有小数,它将自动舍入该值。
答案 2 :(得分:-3)
不,它不会,你也有错误的查询。