データ突合に効果的な方法とは?

このQ&Aのポイント
  • データ突合の方法やツールについて教えてください。会社でデータの突合作業が頻繁に行われており、時間や労力を削減できる効率的な方法を探しています。
  • 現在、データ突合作業にはMS-Accessを使用していますが、大容量のデータを扱うと処理時間がかかってしまい、MS-Accessが壊れることもあります。ローカルで行う必要があり、LAN上でのリンクはできません。より効率的かつ安定したソフトウェアやツールについて教えてください。
  • MySQLでのデータ突合を検討していますが、SQL Serverなど他の選択肢もありますか?どのような選択肢が最適なのか教えてください。
回答を見る
  • ベストアンサー

データ突合のよい方法を教えて下さい

こんばんわ。 いつも皆様のアドバイスを頂いて助かっており、大変お世話になっております。 ご相談なのですが 会社でデータとデータの突合(一致したデータや不一致データの抽出してテーブルを作りxlsを出力等)をACCESSを使用してする事がよくあります。 しかし、その突合のデータが2GB同士だったりので、時間もかかってしまい、MS-ACCESSは2GBで壊れるので苦戦する事が 多いです。 LANにてサーバーにテーブルを置いてのリンクも都合上、今はできないので端末の中でのローカルでやっているのですが、ACCESSよりもっと時間のかからない効率的なソフトはありませんでしょうか? 今度、MySQLで試そうと思っているのですが・・・ SQL Serverは使わない方向でご教授頂けませんでしょうか? 何卒、宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
noname#182251
noname#182251
回答No.4

#1、#2、#3です。 >選択クエリでするよりもSQL構文を使った方が処理は早いのでしょうか?? そんなことはないでしょう。ただ処理時間を計るのに使い慣れたデルファイを利用したため,SQL文にせざるを得ませんでした。それも単にクエリーを作り、動作を確認してから、クエリービューをSQLビューに替えただけです。 ともかく、他言語やVB(A)で、クエリーを利用する場合はSQL文をいじることが多いと思います。 これは蛇足ですが「教えてgoo!」では、テキストしか表示できないし。

earlgyreprince
質問者

お礼

ご回答ありがとうございます! SQL構文は知っていますがあまり使っていなかったのが現状です。 再度、試してみます♪ 幾度となく丁寧にご教授頂き、ありがとうございました☆ また機会がありましたらお教え頂きたいと存じます。 感謝しております。

その他の回答 (3)

noname#182251
noname#182251
回答No.3

#1、#2です >MySQLやoracleではもう少し早いのかとも考えたのですが 使用経験がないので推測するだけですが、それほど変わらないと考えています。なぜならば単独での並べ替えや検索はアルゴリスムにより決まるわけですが、この分野はほとんど研究し尽くされ、データベース・ベンダによりそれほど差がつくことはあり得ないからです。 結局oracle辺りが何に注力しているかと云えば、トラブル発生時のロールバック等の対策をどの程度完璧にするか、あるいはアクセス数が膨大になってもいかにパフォーマンスを落とさないかなどでしょう。 上記はさておいて、途中にテーブルを作成するとどの程度よけいにかかるか10万件で試験してみました。テーブルを作成しない場合 SQL文は SELECT test.SN, test.ID FROM test INNER JOIN test2 ON test.ID = test2.ID ORDER BY test.ID; オープンしてレコードの最後に移動するまで1891ミリ秒(測定ごとに多少変わる) レコードを全て削除後テーブルにインサートしレコードの最後に移動 SQL文は INSERT INTO test3 ( SN, ID ) SELECT test.SN, test.ID FROM test INNER JOIN test2 ON test.ID = test2.ID ORDER BY test.ID; 3188ミリ秒。この差をメンテナンスその他で必要なコストと見なすかどうかでしょうが、運用時とチェック時で替える手もありそうです。 環境:CeleronD 3.06GH + 1GB RAM + XP Home SP2 + DP6 UP2 ご参考までに

earlgyreprince
質問者

補足

ご回答有難う御座います☆ MySQLやoracleではそう変わらないのですか・・・ SQL文の記述有難う御座います! とても分かりやすく参考になりました♪ 初歩的な質問なのですが選択クエリでするよりもSQL構文を使った方が処理は早いのでしょうか?? その辺りだけ最後のご教授と頂ければと存じます。 何卒、宜しくお願い致します。

noname#182251
noname#182251
回答No.2

#1です。補足有り難うございました。しかし詳細が把握できないこともあり、以下はあくまでも参考です。 テーブルを度々作成しているようですが、これだとディスクへの書き出しが発生するので、当然時間もかかりますし、全体ファイルのサイズも大きくなります。クエリとかビューで処理できないのでしょうか?

earlgyreprince
質問者

補足

こちらこそご回答ありがとうございます。 途中の状態を後ほど確認する為にテキストやテーブルに保存しております。 用途に応じてクエリにてエクスポート等しております。 しかし、時間がかかるのが問題です。 やはり重い分だけ時間がかかってしまうのは仕方のない事でしょうか? MySQLやoracleではもう少し早いのかとも考えたのですが。。。 ご存知ならご教授下さいませ。

noname#182251
noname#182251
回答No.1

・処理時間は全体のファイルサイズより、レコード数、フィールドの大きさによるところが大きいと考えます。この辺りはどのようなものでしょうか? ・処理したい内容(一部でよいがもう少し具体的に)と、そのためのSQL文(違う方法であればその手続き)を示さないでしょうか?

earlgyreprince
質問者

補足

ご回答有難う御座います。 レコード数はいずれも60万でフィールドは30~55程ございます。 処理したい内容は様々にあるのですが、多いのは2テーブルの一致データ(クエリでリレーションシップ)を抽出して2テーブル分のフィールドをテーブル作成クエリで作ります。 その作成したテーブルに不一致分のデータ(不一致クエリ)を追加して1つのテーブルを作成します。 今度はまた同じ位の要領のテーブルを突合させて同じ様にフィールドを全て出してテキストなどでエクスポートする形です。 お分かり頂けましたでしょうか? 宜しくお願い致します。

関連するQ&A

  • SQLサーバのデータをAccessにリンクする方法

    SQLサーバの勉強を始めたばかりの者です。 Accessのテーブルを、SQLサーバに移行したいと考えています。 Acessのサイズアップして SQLサーバにデータを移行することはなんとかできた様子なんですが 今度はそのSQLサーバのデータをAccessにリンクする方法がわかりません。 ネットで検索したのですが Accessのバージョンが違っていたりしてどうもわかりません。 わかりやすく手順など掲載されているサイトがあったら 教えてください! Access:2007 SQL Server:2008 を使用しています。

  • SQL ServerとACCESSとのデータのやり取りについて

    下記の仕組みを検討しています。データをSQL Serverに置く。(安全性などを考慮して)Access側にも同じ構造のテーブルを用意してデータの編集・検索表示などをACCESSで行う。更新したデータをSQL Serverの該当テーブルにSQL文を実行して書き込む。書き込み方法は、両者を比較してSQL Server側にないレコードをInsert文にて追加する。(Not Inによるサブクエリを使用) お聞きしたいのは、ここで問題が発生していまして、 (1)単一主キーのテーブルの場合は動作しているが、複数主キーのテーブルの場合に、処理に非常に時間がかかる、もしくはエラーとなること(複数主キーでは処理できないものなのか) (2)上記のようなSQL ServerにデータをおいてAccess側でデータの編集・検索表示などを行う場合の良い仕組みについて 色々とHPを探し回ったのですが、今回のケースにずばり当てはまるものがなく、解決の糸口もなく苦戦しています。わかりにくい質問文になって申し訳ないですが、似たようなご経験の皆様方おられましたらアドバイス頂けないでしょうか。お願い致します。

  • MS ACCESS 年月指定の抽出について

    MS ACCESS利用初心者です。 SQL ServerのデータをMS ACCESS 2010を使用しリンクテーブルで データの抽出をしたいと苦戦しております。 データにデータ型が短いテキストに日付(YYYY/MM/DD)が入っているのですが、 年月(YYYY/MM)を指定して、その年月のデータを抽出するため、 抽出条件には、どのように記述すれば良いのでしょうか。 ご協力お願いいたします。

  • オラクルからAccessにデータ追加

    オラクルから、必要なデータを抜出し加工の為のDBをAccessで作成していますが、オラクルから抜き出したデータ(レコードセット)を、どうやってAccessのテーブルに書き込めばよいかがわかりません。 ◎環境 Oracle:10g Access:2010 ◎現在の状況 Dim CON As New ADODB.Connection Dim RS As ADODB.Recordset Dim SQL As String Dim i As Integer 'DB接続定義 CON.Open "DSN=DNS名;UID=ユーザー名;PWD=パスワード;" 'SQL文 SQL = "SELECT " SQL = SQL & "カラム1," SQL = SQL & "カラム2," SQL = SQL & "カラム3" SQL = SQL & "FROM オラクルテーブル名 " SQL = SQL & "WHERE 抽出条件 " SQL = SQL & "AND 抽出条件" SQL = SQL & "GROUP BY カラム" SET RS = CON.EXCUTE(SQL) For i = 1 To 10 Debug.Print rs(カラム1) & rs(カラム2) next i ここまでは、オラクルのテーブルから、レコードセットにデータが取り込まれてます。 rs.close: SET RS = Nothing con.close:SET CON=Nothing end sub 案1 レコードセットのデータを、Access側のテーブルにループで回して、1行ずつデータ追加 案2 INTO句で直接、テーブル作成 調べていて、2通りのやり方があると思うのですが、どちらにしても、テーブルへの書き込み方がわかりません。 案1の場合、Access側のテーブルを開いてデータ追加する方法 ※同時に2つのテーブルを開くことになるのでは? 案2の場合、SQL文はオラクルで処理する為の物なので、AccessテーブルのINTO句が使えるのか? オラクルのテーブルをリンクする事も考えたのですが、実際動かすPCにはAccessRuntimeしかインストールしてませんので、オラクルのテーブルをリンクしてくれませんでした。 よい方法があれば、アドバイスを頂けたら幸いです。

  • 抽出条件でデータ型が一致しません。(エラー 346

    フロント:Access2003 , バック:SQL Server7.0 テーブル名 dbo_TB1(ODBCテーブル) Access2003 日付 データ型(日付/時刻型) yyyy/mm/dd SQL7.0 日付 データ型(smalldatetime) yyyy/mm/dd 以下のモジュールを実行すると、 抽出条件でデータ型が一致しません。(エラー 3464) とエラーが出てしまいます。 よろしくお願いします。 Dim myDate As Date myDate = Date   strSQL = Empty   strSQL = strSQL & "SELECT * FROM dbo_TB1"   strSQL = strSQL & " WHERE 日付 = #" & myDate & "#"   strSQL = strSQL & " ORDER BY 日付" Forms![フォーム].Form.RecordSource = strSQL

  • 重複しないデータの抽出について

    MYSQL5.0.77で DBをつくり テーブル1のAフィールドのデータから テーブル2のAフィールドのデータ、 テーブル3のAフィールドのデータ、 テーブル3のAフィールドのデータ、 のいずれにも重複しないデータのみ 抽出したいと思っています。 どのようなSQL文を書けばよいでしょうか? じぶんでいろいろ試しましたがどうしても出来ません。 どなたかご教授願います。

    • ベストアンサー
    • MySQL
  • MySQL 複数フィールドで不一致の抽出

    ジャンル  id ジャンル名 日 数 id ----+---------------+--------------+---------+------- 001 ワンピース 20110518 10 a001 001 ワンピース 20110518 6 a002 002 アクセサリー 20110518 5 b002 仮に、このようなデータがあったとします。 数時間後には、↓のように変更がかかって送られてきます。 001 ワンピース 20110519 7 a001 001 ワンピース 20110518 6 a002 002 アクセサリー 20110519 9 b002 データ配布元の問題で、内容が更新された時点で、まだデータが確定していないものは、前日のデータが混ざって送られてきます。 この仕様を改良することは、残念ながら全く不可能です。 しかし、このデータをそのままテーブルに取り込んでしまうと、当然、2行目が重複してテーブルに収まってしまい、その後のデータ抽出に支障がでます。 例の場合でいえば、既に存在している2行目のデータを捨て、1行目と3行目のみを抽出する方法を探しています。 そこで、全部のデータを持つのをテーブル1とし、新しく着いたデータ(0519を含む方)をテーブル2に一時保管て、 SELECT テーブル2.ジャンルid, テーブル2.ジャンル名, テーブル2.日, テーブル2.数, テーブル2.ID FROM テーブル2 LEFT JOIN テーブル1 ON (テーブル2.ID = テーブル1.ID) AND (テーブル2.数 = テーブル1.数) AND (テーブル2.日 = テーブル1.日) AND (テーブル2.ジャンルid = テーブル1.ジャンルid) WHERE (((テーブル1.ジャンルid) Is Null)); と不一致SQLをAccessで行ったところ、1行目と3行目までが抽出できました。 ジャンルid、日、数、id が一致しないものを取りだすという不一致クエリの改造です。 ところが、同じSQLを、本番であるMySQLで行ったところ、データが抽出できす、反応が無くなってしまいます。 サンプルでは件数を絞りましたが、実際には1回分のデータが1万件近くあり、さらにメインテーブルは60万件ほどになるため、量が多すぎるためとも思いますが、4時間経ってもクエリの結果が返って来ないのは、MySQLとなにか合わないのではないかと思います。 MySQLで、上記と同じく、ジャンルid、日、数、id の全てが一致しないデータを抽出する事は可能でしょうか? ちなみに、MySQLテーブルでは、idの前にインクリメントのフィールドを置き、インデックスもインクリメントのフィールドで作成してあります。 よろしくお願いします。

  • access・複数のテーブル・重複除外したデータ

    accessで複数のテーブルで重複しないレコードだけを抽出するSQL文を知りたいです。 フィールドは多数あり、「フィールドの内容が全て一致するレコード」以外のレコードを 重複しないレコードとして抽出したいと思っています。 テーブルは3つ以上ありますが、2つのテーブルで実行するSQL文でかまいません。

  • 【Access】部分一致で不一致データを抽出したい

    クエリで2つのテーブルから、不一致データを抽出したいのですが、 完全一致だけでなく部分一致のデータも一致データとして取り除きたいです。 [テーブルA]フィールド1 000-0001 000-0001A 000-0002 000-0003 000-0004 [テーブルB]フィールド2 000-0001 000-0002 というようなデータで、結果は [結果] 000-0003 000-0004 というふうにしたいです。 (000-0001だけでなく000-0001Aというデータも取り除きたいのです。) Access初心者で、クエリウィザードを使用した重複データ抽出、不一致データ抽出、 およびクエリデザインを使用した重複データ抽出が何とかできる程度です。 初心者でも分かるようにご回答いただければ大変助かります。 よろしくお願いいたします。

  • SQLサーバにある日付型のデータから特定の曜日を抽出する方法は?

    SQLサーバに日付と料金の入ったテーブルがあります。 例えば、下のようなデータがあるとします。 日付            料金 2005/11/08 11:15:00  5000円 2005/11/09 12:00:00  6000円 2005/11/15 15:15:00  4000円 2005/11/16 09:00:00  7000円 このテーブルから火曜日のデータだけを抽出したい場合、 どのようなSQL文を書けばよいのでしょうか? どうぞ、よろしくお願いしますm(_ _)m