MySQL - ROUND()是否使用索引?

时间:2011-12-12 05:26:18

标签: mysql indexing rounding

使用ROUND()函数时,MySQL是否使用任何索引?

考虑这个问题:

SELECT CPRID,ROUND(Dist*1000) AS `Distance` 
FROM CPRaw_ID1 
GROUP BY ROUND(1000*Dist) 
ORDER BY ROUND(Dist*1000)

MySQL仍会在Dist列上使用我的索引吗?

3 个答案:

答案 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)

不,它不会,你也有错误的查询。