當使用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