- 締切済み
datファイルとidxファイルで
お世話になってます。 VB.NET2005 + mdb(2000形式) で作りこんでいるのですが、データ量が多いためか単純なSQL文でもレスポンスが遅いのです。 発行するSQL文自体はシンプルなものばかりなのでmdbではなくdatファイルとidxファイルで自前のDBを作り高速化を図ろうと考えています。 datファイルとidxファイルでやり取りをするサンプルや勉強できるサイトなど、ご存知でしたら紹介して頂けませんでしょうか。
- utugi_taro
- お礼率94% (55/58)
- その他(データベース)
- 回答数3
- ありがとう数5
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- nackfive
- ベストアンサー率32% (21/64)
GroupByでそれだけの大量なデータであれば 抽出件数にかかわらずグループさせるだけで 相当掛かると思います。 それを ローカルで走らせるとなると 相当なスペックのマシンでも難しいのではないでしょうか? 詳細がわからないので 断定は出来ませんが 自作で出来る代物では無いと思います。 データの持たせ方、構造から 再考の余地があるのではと 思います。
- noro6677
- ベストアンサー率21% (34/158)
アクセスを使うのをやめる。 ハッキリ言ってアクセスはリレーショナルデータベースの中では ダメな分類。 最低でもMySQLかPostgreSQL。 (MySQLは動作が速く、PostgreSQLはSQLの標準規格に使いつくり) 金あるならオラクル。
お礼
回答ありがとうございます。 私も正直なところ、Accessに限界を感じてきており他DBへの模索を始めているところです。 ただ、ソフト+データでの配布を前提として考えているので他PCにDBソフトのインストール作業が発生しない形式を探していたりします。 mdbはうってつけだったのですが、いろいろあるのでどうにもこうにも。 そこでidxファイルとdatファイルを思いついた訳です。
- bardfish
- ベストアンサー率28% (5029/17765)
>自前のDBを作り高速化を図ろうと考えています。 それは得策ではありません。 自前でデータベースエンジンを作ったとしても満足行くとは限りません。 mdb(Microsoft Access Database)で単純なSQLでレスポンスが遅い場合、インデックスの張り方を見直すことで大幅な改善が見込めます。 WHEREで指定されている項目にインデックスはありますか? SELECTで抽出される件数は妥当ですか?
お礼
早速の回答ありがとうございます。 INDEXに関してはWHERE句の項目指定の並びに注意しながら最小構成で済むよう張ってあり、SELECTで抽出される件数については全件(WHERE指定なし)もしくは1件(GroupByしていますが)です。 実は当初、ひとつのmdbで作りこんでいたのですが、mdb自体が10G近くに達したためTABLEごとに物理ファイルを分け、全てをリンクさせたひとつのmdbから読み取り専用でアクセスする形にしています。 注意するべき点が他にもありましたらご指摘下さると嬉しいです。
関連するQ&A
- MS Accessで作成したmdb形式ファイルにアクセスしたい
MS Access2000で作成したMDBファイルにC言語(VisualC++5.0)で 作成したモジュールからSELECT文やINSERT文などのSQL文を発行するなどして、 MDB内のデータをアクセスしたいのですが、インターネット上にそのような プログラムのサンプルが紹介されているサイトをご存知ないでしょうか?
- ベストアンサー
- C・C++・C#
- VBからCrystalReportsへSQL文を渡すには?
VBからCrystalReportを呼び出し、CrystalReports側でSQL文実行させたいのですが、ヘルプ等を見ても方法がわかりません。 例えば・・・ 1 VBで入力画面を用意し、抽出条件を入れさせる。 2 入力された条件にてSQL文を生成しSQL-Serverから該当行を抽出する。 3 CrystalReportsで作表する。 VBでSQL文を生成し、例えばMDBに書き出し、それを単純にCrystalReportsで読むということは出来たのですが、中間ファイル(この場合はMDB)を作らずに同様のことができるのでしょうか? つまり、VBから制御されたCrystalReportsでDBから条件抽出をかけつつ作表するということが可能か否か、可能であるならばその方法をご教授いただけると幸いです。
- ベストアンサー
- Visual Basic
- mdbからのデータ取得をSQLで行いたいのですが・・・
VB.NETで開発中です。 “TEST”という名称のmdb(MS-Access)のDBに接続し、“区分マスタ”というテーブルからデータを取得したいのですが、これをSQL文で行いたいと思っています。 サンプル的なコードを記述して教えていただけると助かります。 よろしくお願い致します。
- 締切済み
- Visual Basic
- PL/SQLでmdb(Access)ファイルへの書き込みは可能?
あまりPL/SQLに関して知識がないので 可能なのかを教えていただきたいのですが、 例えば、 Oracleのテーブルデータ(例:メッセージテーブル) をローカルの空のMDBファイルへ丸ごとコピー といった処理をVBで行っているのですが、 毎回Insertを発行しているために とても処理に時間がかかっています。 (もともとこれ自体無謀なんですが・・・) そこでPL/SQLではバルク処理?といった 高速処理もあるようで、 このVBのかわりにPL/SQLで出来ないものだろうか・・・ と単純に思ったのですが、 PL/SQLでこういったコピー処理っていうのは 可能なんでしょうか?? ご存知の方、教えていただきたいです。 よろしくおねがいします。
- ベストアンサー
- Oracle
- VB5+DAO3.5でSQLサーバーに接続方法
実行環境はNT4.0、DAOは3.5(3.51ではない) VB5でSQLサーバーに接続したいのですが、 できるのでしょうか? できればODBC経由でなく直に繋ぎたいのですが、むりならODBC経由でもいいです。 サンプルコードをお願いいたします。 1)DB接続、2)SQL文発行&レコードセット取得 位まであればありがたいです。 上記が無理の場合RDOでの使用方法があれば お願いいたします。
- ベストアンサー
- SQL Server
- mdbがとじれない
VB6で開発をしています。 DB変数A = OpenDatabase(【mdb名】) Set QUERY変数B = DB変数A.CreateQueryDef("") QUERY変数B.SQL = SQL文 QUERY変数B.Execute (中略) Set レコード変数C = DB変数A.OpenRecordset(SQL文2) (中略) Set DB変数A = Nothing といった処理を行っています。 この処理を繰り返すのは問題ないのですが、 この処理で使用している【mdb名】はレコードロックされたままになってしまいます。 どのように修正したらよいのでしょう?
- ベストアンサー
- Visual Basic
- 実行したSQLの結果を返す方法
VBでSQLを発行、及び実行をし、 MDBを更新する処理を作成しています。 各SQLの実行(SELECT、INSERT、DELETE等)が 成功or失敗したかどうかを判定するには どのようにすれば良いのでしょうか? ソースのイメージとしては↓のような感じです。 Dim db As DAO.Database 'DB設定 Set db = OpenDatabase(DB名) 'SQL実行 db.Execute (DB内で作成したSQL) 【実行したSQLの正常終了の判定】 【実行メッセージ(成功or失敗)出力】
- ベストアンサー
- Visual Basic
- VB2005 DataGrdViewで、SQL文記述
VB6からVB2005に切り替える作業をしています。 DataGridViewにMDBファイルの中身を表示させることは出来ました。 DataSet,BindingSourceを用いています。 コードの記述で、SQLの文章を変更させたいのです。 WHERE文の記述を変えたりしたいのですが。 DataSourceにSQL文を記入することが出来ません。 DataSourceには記述できないのでしょうか? それとも、根本的に間違っているのでしょうか。 よろしくお願いいたします。
- ベストアンサー
- Visual Basic
- MDBファイルをCSV出力したい
こんばんは。 環境: OS:WINDOWS2000 VB6.0 sp5 アクセス2000 VBからアクセスのMDBデータをCSV形式で出力させようとしています。 mdbファイルが実行中にVBのexeを起動してcsvファイルを取得したいのですが、いい方法が分かりません。 閉じているMDBファイルのデータをCSVで出力することは可能です。 MDBファイルが開いているとexeを実行した時に「実行時エラー7866 データベースが開いています」というようなメッセージが出て処理ができません。 なにかいい方法はないでしょうか よろしくお願いいたします。
- ベストアンサー
- Visual Basic
- SQL文で変数の使用
VB6.0でオラクルDBにSQL文を発行したいのですが、 変数の値を使用して更新(update)や追加(insert) 処理を行うときの構文がわかりません。 どなたか教えてください。
- ベストアンサー
- Visual Basic
お礼
あれ? お礼のつもりが補足に入ってしまいました。
補足
回答ありがとうございます。 TABLE構成を見直して1TABLE最大500MB(1tableを1mdbにしてリンクさせてます)にして、多くともGropeByは500MBのmdbを対象にするようにさせてあります。 それでも、やはり無謀な感じはしていますが。 自作に関しては「もしかしたら・・・」という(甘い)考えから来ているのでやれるだけの事はやってみようと思った次第です。 ただ、数Gのデータを扱うフリーソフトでレスポンスが良いものがあって驚き、データの持ち方をみてみたらそれはidxファイルとdatファイルだったのです。 そのソフトはMicroSoft製品で作ったものではなさそうな感じでしたが、どういう仕組みになっているのか分からず、漠然とidxとdatをソフトに組み込んだ何かのDBエンジンで検索しているのかな?と思って質問してみました。