2016-12-06 50 views
0

我正在使用mysql地理位置查詢和它的所有工作正常。然而,當我嘗試返回以米爲單位的距離(作爲生成的col),然後將其排列到最接近最遠的距離時,這會消耗時間。在100k數據集上接近14秒。MySql索引生成的列保存動態數據?

如上所述,distance_in_meters是一個生成列,並且沒有編制索引。 有沒有辦法對這個生成的col進行索引,即使它裏面的數據總是會不一樣?索引這個col甚至有幫助嗎?

+0

你真的需要爲所有行計算它嗎?如果你想限制結果,比如說,在100英里之內。那麼WHERE ABS(緯度1,緯度2)<3和ABS(經度1,經度2)<3將限制必須進行完整計算的行數。 – Alan

回答

0

按設計,索引是「靜態的」。也就是說,如果沒有什麼變化裏面的這個表,那索引就不需要改變。外部變化對指數沒有影響。

您的任務似乎是「我在(lat,lng);哪裏是最近的10家咖啡店」。 (x,y)是計算「最近」(即距離)所需的外部數據。你正在尋求一個動態指數。所以不行」。

該任務可以是幫助INDEX(latitude)(或經度),但是這會將其從全表掃描下降到掃描表中的一大塊。對於100K行來說,這可能「夠好」。

如果你長到更多的行和/或你成爲I/O限制(由於小RAM),那麼你將需要我的blog