[TableA]に存在して、[TableB]に存在しないもの
を抽出したい。
次のような大量データをさばこうとすると
無応答に近い形で一向に結果が得られません。
効率的(現実的)な方法ってありますか?
(そもそもクエリのみでは非現実的なのでしょうか?)
[TableA]38,000 件(フィールド数:42個)
[TableB] 73,000 件(フィールド数: 4個)
[Out]フィールドは item(テキスト255バイト) のみの定義で
データは空で作成済み
INSERT INTO [Out]
SELECT DISTINCT [TableA].item FROM [TableA] WHERE [TableA].item Not In (SELECT
DISTINCT [TableB].item FROM [TableB]);
---
MS Access 2002
クエリをSQL表示にすると、以下のようになりましたが。
INSERT INTO Out ( item )
SELECT TableA.item
FROM TableA LEFT JOIN TableB ON TableA.item = TableB.item
WHERE (((TableB.item) Is Null));
[Out]はテーブルですね。
http://slashdot.jp/~inosisibeyan/journal/
inosisibeyanの日記
私なら、テンポラリーテーブルを作ってから、クエリーを行いますが、そもそも時間が掛かるのはデータが多いと言うのが原因のようですので、減らして実行が基本です。
経験則ですが、Aのデータ総量とBのデータ総量を掛け合わせた位の時間が掛かるものです。
ですので、ここではitemをそれぞれ抽出したテーブルでクエリーを行い、それでキーを求め、そのキーから再度クエリーを行う方が現実的です。
又、お金に糸目を付けないやり方なら、ハードウエアを贅沢にすると、時間的に早くなりますがこれこそ、非現実的です。
http://www.geocities.jp/mickindex/database/db_optimize.html#Loca...
SQLを速くするぞ―お手軽パフォーマンス・チューニング
(not )inよりは(not )existsの方が速いです。
http://www11.plala.or.jp/studyhall/access/sql03.html
プログラム学習室 Access SQL
いちばん下に例があります。
ありがとうございます。1つ目、2つ目のURLともにかなり有力な情報です。
(今回に限らず役立ちそうです)