当使用ROUND()
函数时,MySQL是否使用任何索引?MySQL - ROUND()是否利用索引?
考虑这个查询:
SELECT CPRID,ROUND(Dist*1000) AS `Distance`
FROM CPRaw_ID1
GROUP BY ROUND(1000*Dist)
ORDER BY ROUND(Dist*1000)
将MySQL的使用还是对Dist
列我的指数?
当使用ROUND()
函数时,MySQL是否使用任何索引?MySQL - ROUND()是否利用索引?
考虑这个查询:
SELECT CPRID,ROUND(Dist*1000) AS `Distance`
FROM CPRaw_ID1
GROUP BY ROUND(1000*Dist)
ORDER BY ROUND(Dist*1000)
将MySQL的使用还是对Dist
列我的指数?
首先,您可以使用EXPLAIN来查看Dist中的索引是否将用于查询。我做了一个实验,发现事实并非如此。
其实,建议是avoid using functions in where clause。另外,这解释了how mysql uses indexes。
在您发布的查询,我想你可以尝试创建另一个表,并把查询结果:
SELECT CPRID,ROUND(Dist*1000) AS `Distance`
FROM CPRaw_ID1
到该临时表,并在距离建立索引。然后,该索引将用于加速查询。
,如果你的存储公里的价值观和你想将它转换为米,我认为这个查询就足够了:
SELECT CPRID, ROUND(Dist*1000, 2) AS `Distance`
FROM CPRaw_ID1
GROUP BY Dist
ORDER BY Dist
以这种方式
你会可以,如果你定义的索引使用索引Dist。 ROUND函数中的第二个参数将标识您需要的小数位数,如果将其设置为0,则不会有小数,它会自动舍入值。
您的查询将引发错误,并且答案不是OP的问题的答案。 – newtover
您可以在查询开始时使用'EXPLAIN'来查看它是否使用了任何索引。 – hafichuk
你能解释一下你试图用你的查询来达到什么吗? – hafichuk
啊,查询只是为了演示..我只是考虑改变从一个浮点数到一个诠释 – Simon