2016-09-06 4 views
0

ディーラーの月間平均距離を見つけるためにクエリを書きましたが、クエリはSQLでかなり高速に動作していますが、同じクエリはMS Accessで無限の時間を費やしています。クエリを最適化するにはどうすればよいですか。MS Accessで以下のクエリを最適化する方法

SELECT su.Buy_PDN 
    ,avg(INT (Sqr((69.1 * (Z3.Latitude - Z4.LATITUDE)) * (69.1 * (Z3.Latitude - Z4.LATITUDE)) + (53 * (Z3.Longitude - Z4.Longitude)) * (53 * (Z3.Longitude - Z4.Longitude))))) 
FROM (
    (
     (
      (
       tbl1 su INNER JOIN tbl2 AS z1 ON z1.Primary_dlr_num = SU.Sell_PDn 
       ) INNER JOIN tblZipCodes AS Z3 ON z1.DlrZip = z3.Zip_Code 
      ) INNER JOIN tbl2 AS z2 ON z2.Primary_dlr_num = SU.buy_PDn 
     ) INNER JOIN tblZipCodes AS Z4 ON z2.DlrZip = z4.Zip_Code 
    ) 
WHERE su.YEAR = 2016 
    AND su.TRANSACTION = 'S' 
    AND month = 9 
GROUP BY su.Buy_PDN 

ここで私は2つのPDNを有するトランザクションを備えています、これらの二つのPDNはTBL2にターンtblZipCodeであり郵便番号を持っているが、各ジッパーのための緯度と経度を有しています。したがって、このクエリでは、すべての別個のBuyPDNが検索され、今月のすべてのSELLPDNの平均距離が検索されます。

ただし、クエリの実行には40分以上かかります。どのように最適化することができます。私は平均的な部分を削除しようとしましたが、依然としてクエリに時間がかかっていたため、参加には時間がかかります。

+2

次のことを明確にしてください:MS SQLで高速に動作しますか? Accessのテーブルはリンクされているかローカルですか?リンクされている場合、リモートデータベースとは何ですか?まず、結合で使用されるすべての列にインデックスがあり、WHERE句 –

+0

がSQL Serverにあるかどうかを確認します。テーブルはリンクされておらず、ローカルです。アプリケーションは非常に古いので、私たちは主キーを持っていません。 –

+0

パススルーはなぜですか? – Fionnuala

答えて

0

distanceのフィールドをtbl1に作成します。 Access 2010+の計算フィールド、またはbuy_PDnSell_PDnアップデートのスクリプトで再計算されたフィールドです。計算コストは​​テーブルの更新に均等に分散され、レポート作成ではすべてのデータが準備されます。

関連する問題