2016-06-21 8 views
1

ハイパーV、
2008年に大きなテーブルとハングアクセス2010
番号:表1、表2に連結され162769、40,2262クエリ R2 <br> MSアクセス2010

MS Accessがハングとロックされるまで応答しません。クエリは次のようになります。

SELECT [Civil Aircraft Registry].[Common Name], [Civil Aircraft Registry].Model, 
    [Linked History Total WO Costs].LastOfPRT, [Linked History Total WO Costs].LastOfUNT, 
    [Linked History Total WO Costs].LastOfSVP, [Civil Aircraft Registry].registration, 
    [Linked History Total WO Costs].ARG 

FROM [Civil Aircraft Registry], [Linked History Total WO Costs] 

WHERE (((Right([Civil Aircraft Registry].[registration],3)) 
     = Right([Linked History Total WO Costs].[ARG],3))); 

クエリは小さいレコード数では動作しますが、大きなレコードサイズでは機能しません。

ご協力いただければ幸いです。

ジェフはあなたの参加条件で

+0

は[リンクされた歴史合計WOコスト]クエリを? –

答えて

4

Right機能(あなたのケースでは、WHERE句)を繰り返し、テーブルスキャンを行うためのAccessデータベースエンジンを引き起こしています。したがって、162,000行* 40,000行では、効果的に〜6.億(6.5E + 9)行の比較を行おうとしています。

それぞれのテーブルに別のText(3)フィールドを作成し、既存のTextフィールドのフィールドにRight(... , 3)を入力してインデックスを作成し、それらの新しいフィールドに2つのテーブルを結合する必要があります。

0

WHERE句の機能を避けることがベストプラクティスであり、パフォーマンスが低下します。

この関数がWHERE節にある場合、結果セット内のすべてのレコードに対して関数が呼び出され、クエリのパフォーマンスが低下する可能性があります。これを行うと、列のインデックスの使用も禁止されます。

あなたが代わりに計算列を作成することができます。

SELECT [Civil Aircraft Registry].[Common Name], [Civil Aircraft Registry].Model, 
    [Linked History Total WO Costs].LastOfPRT, [Linked History Total WO Costs].LastOfUNT, 
    [Linked History Total WO Costs].LastOfSVP, [Civil Aircraft Registry].registration, 
    [Linked History Total WO Costs].ARG, right([Civil Aircraft Registration],3) AS Reg_3, 
    right([Linked History Total WO Costs].ARG,3) AS Arg_3 

FROM [Civil Aircraft Registry], [Linked History Total WO Costs] 

WHERE Reg_3 = Arg_3; 
+0

ご協力いただきありがとうございます。私は両方の方法を試して、どのように動作するかを教えていきます。再度、感謝します。 – Jeff