[英]MySQL commands execution time very long on a large table
我目前使用以下命令比較兩個表中的long和lat值,並根據另一個表更新一個表中的sitecode列,如下所示:
CREATE FUNCTION great_circle_km (lon1 DOUBLE, lat1 DOUBLE, lon2 DOUBLE, lat2 DOUBLE)
RETURNS DOUBLE
RETURN 6371 * acos(cos(radians(lat1)) * cos(radians(lat2)) * cos(radians(lon2) - radians(lon1)) + sin(radians(lat1)) * sin(radians(lat2)))
UPDATE `source` SET `source`.`sitecode` = (
SELECT `sitecode` FROM `siteinfo`
ORDER BY great_circle_km(`source`.`longitude`, `source`.`latitude`, `siteinfo`.`longitude`, `siteinfo`.`latitude`)
LIMIT 1
)
但是,對於相當大的8000行表,MySQL需要花費2分鍾以上的時間來處理和完成UPDATE命令。 有什么辦法可以優化這個嗎?
抱歉,如果我在這里錯過了一些東西,但是ORDER BY
看起來很昂貴,如果兩個表都共享一個公共密鑰,那么您可以嘗試使用MIN
(或MAX
)並對其進行基准測試以查看查詢時間是否有所改善? 如果沒有共享密鑰, siteinfo
僅包含一行?
UPDATE `source` A
SET A.`sitecode` = (SELECT MIN(great_circle_km(A.`longitude`, A.`latitude`, B.`longitude`, B.`latitude`)) FROM `siteinfo` B WHERE A.someID = B.someID);
如果根據此建議可以提供更多詳細信息,請告訴我是否有更好的答案,
問候,
詹姆士
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.