1

次のクエリの精度を上げる方法はありますか?

SELECT DISTINCT a.localgeo, a.foreigngeo, b.lat, b.lng, c.lat, c.lng
FROM tbl_correlateddata a
JOIN tbl_geodetail b ON a.localgeo = b.code
JOIN tbl_geodetail c ON a.foreigngeo = c.code

2 つの国コードを持つテーブルにアクセスしています

localgeo|foreigngeo
--------------------
JP      |AD
JP      |AD
US      |HK
AD      |JP
HK      |US
AD      |JP
CN      |US

別のテーブルの経度と緯度の値を入力しようとしています

code|lat|lng
------------
JP  |1  |2
US  |3  |3
HK  |1  |4
AD  |3  |4
CN  |4  |4

結果はこんな感じ

localgeo|lat|lng|foreigngeo |lat|lng|
------------------------------------
JP      |1  |2  |AD         |3  |4
US      |3  |3  |HK         |1  |4
HK      |1  |4  |US         |3  |3
AD      |3  |4  |JP         |1  |2
CN      |4  |4  |US         |3  |3

しかし、クエリには多くの時間がかかります。これをスピードアップする方法はありますか?

4

1 に答える 1

2

問題は、すべてのフィールドに個別に使用していること、作成していないこと()、そして非常に時間がかかることです。1つの列にのみdistinctを使用するようにしてください

このような

    SELECT DISTINCT (a.localgeo), a.foreigngeo, b.lat, b.lng, c.lat, c.lng
    FROM tbl_correlateddata a 
    JOIN tbl_geodetail b 
      ON a.localgeo = b.code 
    JOIN tbl_geodetail c 
      ON a.foreigngeo = c.code

編集:

     SELECT DISTINCT a,b,c FROM t

ほぼ同等です:

     SELECT a,b,c FROM t GROUP BY a,b,c

だからあなたはそのようにするべきです

     SELECT a.localgeo, a.foreigngeo, b.lat, b.lng, c.lat, c.lng
    FROM tbl_correlateddata a 
    JOIN tbl_geodetail b 
      ON a.localgeo = b.code 
    JOIN tbl_geodetail c 
      ON a.foreigngeo = c.code
     GROUP BY a.localgeo ,a.foreigngeo
于 2012-12-17T08:27:38.647 に答える