簡體   English   中英

MySQL在大型表上執行時間非常長

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM