人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

2つのテーブルにある item をキーに、
[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

●質問者: P-mako
●カテゴリ:コンピュータ
✍キーワード:access MS Out SELECT いもの
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● たけじん
●10ポイント

http://www.hatena.ne.jp/

はてな

クエリをSQL表示にすると、以下のようになりましたが。


INSERT INTO Out ( item )

SELECT TableA.item

FROM TableA LEFT JOIN TableB ON TableA.item = TableB.item

WHERE (((TableB.item) Is Null));


[Out]はテーブルですね。


2 ● inosisibeyan
●10ポイント

http://slashdot.jp/~inosisibeyan/journal/

inosisibeyanの日記

私なら、テンポラリーテーブルを作ってから、クエリーを行いますが、そもそも時間が掛かるのはデータが多いと言うのが原因のようですので、減らして実行が基本です。

経験則ですが、Aのデータ総量とBのデータ総量を掛け合わせた位の時間が掛かるものです。

ですので、ここではitemをそれぞれ抽出したテーブルでクエリーを行い、それでキーを求め、そのキーから再度クエリーを行う方が現実的です。

又、お金に糸目を付けないやり方なら、ハードウエアを贅沢にすると、時間的に早くなりますがこれこそ、非現実的です。


3 ● web_nao
●40ポイント

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ともにかなり有力な情報です。

(今回に限らず役立ちそうです)

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ