优化找到属于两个不同表的两个纬度/长点之间的最小距离所花费的时间

时间:2015-08-15 12:06:52

标签: php mysql

我目前有两个表,每个表有大约40k行。每个存储纬度/长度在其中,我需要从表2'中找出纬度/经度。这至少是距离表格1的长度/长度的距离。对于每个纬度/经度的表1'。

出于我的目的,我正在使用以下查询,但由于我的查询遍历整个40k * 40k行,因此需要花费大量时间,所以我可能正在寻找可以为此进行的一些优化。

    $select_Table1 = 'Select id, latn, longe from table1';
    $table1Data = mysqli_query($connection,$select_Table1) or die("error :".mysqli_error($connecttion));
    $radius = 6371;//Mean radius of earth
    $deg2Rad = (pi()/180);

    while($table1_rows = mysqli_fetch_row($table1Data))
    {
        $table1Id = $table1_rows[0];
        $table1Lat = $table1_rows[1];
        $table1Long = $table1_rows[2];
        $a = "Select $radius * acos(sin($deg2Rad*($table1Lat)) * sin($deg2Rad*(table2.lat)) +  cos($deg2Rad*($table1Lat)) * cos($deg2Rad*(table2.lat)) * cos($deg2Rad*($table1Long-table2.long))) as Distance from table2 order by Distance limit 1";
        $result = mysqli_query($connection, $a) or die("Error :".mysqli_error($connection));
        while($rows = mysqli_fetch_row($result))
        {
            //Some calculations here
        }
    }

此外,表格是动态的,它们经常被更改,因此无法进行预先计算。

0 个答案:

没有答案