• ベストアンサー

アクセスを軽くしたい

Win2000・Office2000・データは月15万件。 アクセスは、抽出クエリーしか使った事がないレベル。サーバーには、HTMLしか権限がありませんのでapach・cgiなどは使えません。 アクセスでアクセス解析の生ログ管理をしています。(アクセスアナライザー) 正規化がまったく判らず、テーブル1つでクエリーで情報を引き出していました。生ログをcsvデータとしてそのままテーブルにしています。2ギガを超えてしまい、主キーをIDナンバーでプロクシを分離し一時的に問題は解決しました。 正規化したいので、IDナンバーを基準にUAやOSなどを分けたのですが、使えない速さになってしまいました。IDを基準に分けることが間違っていることは、判ります。が、正規化ウィザードを使用するとロックが限界を超えフリーズします。一番少ない項目でも、2000程あり、手動で振り分けるのは無理です。 やりたいこと 1、過去のデータを快適に動かしたい。 2、今後のデータを自動で正規化しながら、取り込みたい。 1・2を1つのmdbで処理が望ましいが、無理なら、分けてもいい。 次のアドバイスをお願いします。 1、何を学べば近道か。または、エラーを回避できる方法。 2、他に適したフリーのソフトがあれば、ご紹介ください。 3、他の提案、私ならこうする・こうしている・考えが間違っている等。 1、では出来れば、自動化するにはこれを学べ等、目的とググるキーワードも教えていただけると助かります。 広範囲な質問ですがよろしくお願いします。

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

  • ベストアンサー
  • yoko1mgs
  • ベストアンサー率27% (220/806)
回答No.1

おはこんばんにちは 多分SQLserverに移行すべきな状態では? 参考のサイトを貼ります。 僕自身は分からないので恐縮ですがデータベースとSQLを 学ぶのがいいのでは? データ件数が多いと エクセル<アクセス<DBserver(MSDEやオラクル等) になると思いますので。

参考URL:
http://www.microsoft.com/japan/solutions/lob/scenario/default.mspx
12345963
質問者

お礼

アドバイス有難うございます。やはり、リレーション等の設計を学ばないとだめですね。教えてもらったSQLで調べたら、オープンソースもあるみたいなので、とりあえず、過去のものは去年で区切りをつけて、今年の分から、リレーションさせる方向でトライします。ソフトだけあっても、駄目なんで、私がバージョンアップしないと。有難うございました。

その他の回答 (1)

noname#60992
noname#60992
回答No.2

とりあえず、データだけでも他のデータベースに移動するべきでしょう。 リンクテーブルを作っておけばアクセスで開発した部分はそのまま使えますので。  フリーのDBや評価版などいろいろありますので、お試しになってみてはいかがでしょうか? DB2はソースネクストから¥2000くらいで販売していますし、評価版もあったと思います。(DB2Lite) Oracle、SQLServer、PostgreSQL、MySQL、SQLiteなどもフリーや評価版の形で提供されています。 http://www.sourcenext.com/titles/sys/56860/

12345963
質問者

お礼

お2人様、ありがとうございました。 過去の分は頑張って、正規化に挑戦し、600メガまで押さえ込みました。連携が上手くいっていないのか、立ち上げにまだまだ不満があります。同時進行で現在のものと、過去のものを調整してます。 問題解決の糸口が見えたのもお2人のおかげです。本当に有難うございました。設計って難しいので、またなにかありましたら、よろしくお願いします。

関連するQ&A

  • Access #エラーについて

    Access初心者です。 よろしくお願いいたします。 [前提]  テーブルA のIDに紐づけてクエリBの数値をクエリCで反映させたい。  〈詳細データ〉   ・テーブルA    [ID] [名称]       1   あ     2   い     3   う     4   え     5   お   ・クエリB    [ID] [数値]     2   10     3   20     5   40   ・クエリC    [ID]  [名称] [数値]     1    あ  #エラー     2    い   10     3    う    20     4    え  #エラー     5    お   40   ・”テーブルAの[ID]”の全レコードと”クエリBの[ID]”の同じ結合フィールドだけを含めてリレーションを行っている。    ・クエリCの算式: IIf(IsError([クエリB].[数値]),0,[クエリB].[数値])  [質問]    ・クエリCの『#エラー』部分を0にしたいのですが、何か良い方法はございませんでしょうか。   ・そもそも上記のロジックは無理がありますでしょうか。    アクセスはあまりいじったことがございません。ご回答いただけますと幸いです。   よろしくお願いいたします。

  • Access2003でのフォーム作成について(再度です)

    民宿の顧客管理をAccessでしようかと思っています。 氏名、住所、来客日などのフィールドを持つ顧客テーブル。 来客日、その日の献立1~17までを持つ日別献立テーブル。 この2つのテーブルからクエリーを作成し、 それを基にフォームを作ってデータを両方のテーブルに振り分けしようとしたんですが、うまくいきません。 クエリーで来客日同士を結ぶとデータは表示されますが新規の入力が出来ません。 顧客テーブルの顧客ID(オートナンバー)と 日別献立テーブルに顧客ID(数値型)を挿入し、2つを結んでも一方のデータしか表示されません。 おかしいとは思いますが、何がおかしいかわかりません。 何か良い方法があればお教え下さい。

  • ACCESSでの関数について

    EXCELではROW()関数で行数を付けることが出来ますが、ACCESSで同様の方法はあるのでしょうか。クエリでROW関数を入れると未定義と出ますし、テーブルにオートナンバーの行を付けて、データを一度クエリで削除した後追加クエリを実行しても1からの連番にならないので困っています。 クエリでROW()関数と同じ方法、またはテーブルでオートナンバーを1からふり直す方法があれば教えてください。

  • Accessのクエリについて

    Accessの初心者です。 “クエリ”がよくわからなくて困っています。 (1)テーブルの情報を更新した場合、クエリも自動で内容が更新するのでしょうか? 複数のクエリがある場合、テーブル更新後すぐにアクセスを閉じて、次にアクセスを起動させた時はクエリの内容も更新されるか。 それとも、テーブル更新後に各クエリを実行しないと更新しないとでしょうか。 (2)クエリ実行後、表示されたデータの一部を書き換えて出力した場合、元のテーブルの内容も変更されてしまうのでしょうか。 教えてください。 どうぞよろしくお願い致します。

  • ACCESS テーブルの正規化

    EXCELデータで以下のような正規化されていない項目のデータをACCESSに取り込んで顧客毎に商品の数量を計算するクエリを使用しています。 顧客ID|顧客名|商品名1|商品名2| ・・・・・・・ XXXXX ○○○       2      3  ・・・・・・・ XXXXX ○○○       2      3  ・・・・・・・・ XXXXX ○○○       2      3  ・・・・・・・・ 商品名が可変で追加されたり、削除されたりするのですが、今までは集計の都度クエリを作成していたため問題はありませんでしたが、今回クエリからレポートとフォームを作成するように指示がありました。自分が集計の都度クエリを作成出来ない環境になったため、事前にクエリを組んでフォーム、レポートを作っておきたいのですが、可変な項目名の集計クエリを作成する方法はあるでしょうか? 私のイメージでは 顧客ID|顧客名|商品名 数量 XXXXX ○○○  商品1  2 XXXXX ○○○  商品2  1 XXXXX ○○○  商品3  3 このように正規化出来ればよいと思います。 ACCESSにはテーブルの正規化機能がありますが、操作方法を読んでみるとやはり事前に項目を指定して作成するように読み取れました(間違っているかもしれませんが) 何か良い方法があれば教えてください。 EXCELのVBAは多少書けるのですが、ACCESS VBAはあまり得意ではありません。 自分でメンテナンス出来るように、出来ればクエリで作成したいのですが無理でしょうか? よろしくお願いします。

  • Accessでのエラー

    Access修行中の身で、勉強をかねて書類BOXのデータベースを作成中です。 親テーブルのフィールド  ID(主キー、オートナンバー)、タイトル名、・・・・・、保存箱ID 子テーブルのフィールド  保存箱ID(主キー、オートナンバー)、保存箱名、・・・・ リレーション  親:保存箱ID-子:保存箱ID という構成です。 クエリで以下のような複合テーブルを作成し、 複合テーブルのフィールド  ID(主キー、オートナンバー)、タイトル名、・・・、保存箱名、・・・・ データを入力しようとすると、「レコードを追加できません。テーブルの結合キーがレコードセットにありません。」というエラーがでます。また、保存箱IDに入力のないレコードは、抽出されません。 どのようにしたいかというと、保存箱IDは入力しなくてもいいフィールド(関連させなくてもよいデータ)にしたく、複合テーブルで保存箱名を入れると、子テーブルに新たにレコードが追加されるようにしたいです。 できれば、SQLを使用せずに解決したいと甘えておりますが、無理でしょうか。

  • Accessの「or」的クエリの作り方

    Accessの質問です。 1つのテーブルは売上のデータが入っていて もう1つのテーブルは売掛のデータが入っています。 その2つのテーブルから売掛と売上のデータをもつクエリを作りたいです。 得意先ごとにユニークなIDを振ってあり、両テーブルにそれぞれ同じIDが存在するのでID をリレーションシップでつないでクエリを表示して、完成!・・・というハズだったんですが。 「売掛がある得意先」かつ「売上がある得意先」しかクエリで表示されません。 売上だけある得意先は、売掛を0にして表示、売掛だけある得意先は売上を0にして表示・・・といういわゆる「and」ではなく「or」的なクエリを作りたいのですが、どうすればいいのでしょう。 売上のない得意先は売上のテーブルにはIDそのものが存在していません。 お返事いただけたら助かります。

  • Access 同一フィード内のデータの引き算

    Access2003ユーザです。 使用距離数を集計していくテーブルを作成したいと思います。 例として、IDと距離というフィールドを基にテーブルを作成し、以下の様にデータを入力します。 ID  /  距離 1  100 2  200 3  400 4  450 このテーブルを基にしてクエリを作成したいのですが、その際に、例えば「使用距離」という自動計算フィールドを、「距離」フィールドの横に表示させたいのです。 ID / 距離 / 使用距離 1 100 0 2 200 100 3 400 200  4 450 50 ・・・ の様にその行のデータから、前の行のデータの引き算を自動計算出来るような方法はあるのでしょうか?

  • アクセスで片方のテーブルを優先して抽出する方法

    アクセスのデータ抽出で質問です。 画像のように「テーブル1」と「テーブル2」があり、クエリで「結果」のようにデータを抽出したいです。 一応出来てはいるのですが、もっとすっきりしたやり方があれば教えて下さい。 <やりたいこと> ・テーブル1とテーブル2のフィールド2を比較し、フィールド1を基準としてテーブル2にデータがあればそちらを抽出、なければテーブル1から抽出したい <現在のやり方> 1)テーブル1とテーブル2の差分クエリを作成 2)1)の差分クエリとテーブル2のユニオンクエリを作成 上記以外のスマートなやり方があれば是非知りたいと思っております。 よろしくお願いいたします。

  • アクセスのテーブルを変更不可にするには?

    アクセス初心者です。 行き詰まり困惑しております。 今、アクセス2003で簡単なフォームを作っています。 テーブルは2つだけで、個人情報テーブルと基本情報テーブルを クエリで結合させました。 個人情報テーブルにはテータが入力されており、 基本情報テーブルにはデータは入っていません。 個人情報テーブルのIDはオートナンバーで作成してあり、 クエリの結合は個人情報テーブルが【1】で、 基本情報テーブルは【多】になっており【1対多】で作成しました。 個人情報テーブルと基本情報テーブルで抽出したクエリを作成し、 フォームを作りました。 個人情報IDを入力すると個人情報テーブルのデータが 自動でフォーム画面に入るようにし、 基本情報を入力できるようにしてあります。 入力できるまでは良かったのですが、 フォーム上で個人情報テーブルを編集すると、 大元の個人情報テーブルまで変更になって困っています。 ここで質問なのですが、 質問1: フォーム上で個人情報テーブルの変更(編集)を出来ないようにするには どうすればよいでしょうか? 質問2: 変更できないようにしても、個人情報テーブル自体には 入力できるようすることは出来るのでしょうか? どなたか解決策をご存知であればご指導ください。 よろしくお願いします。