したがって、私の職場では、巨大なアクセスファイル(MS Access 2003および2007で使用)があります。ファイルサイズは約1.2GBなので、ファイルを開くのに時間がかかります。レコードを削除することはできず、約100以上のテーブルがあります(毎月、さらに4つのテーブルを作成します。質問しないでください)。これを改善するにはどうすればよいですか、つまりファイルをダウンサイジングしますか?
6 に答える
あなたは2つのことをすることができます:
- リンクされたテーブルを使用する
- たまにデータベースを「コンパクト」にする
リンクされたテーブル自体はデータベースの全体的なサイズを制限しませんが、より小さく、より管理しやすいファイルに「パッケージ化」します。これを調べるには:
「ファイル」メニュー+「外部データの取得」+「リンクされたテーブル」
リンクテーブルには、データサブセットの複数のバージョンを保持できることや、リンクテーブルマネージャーを使用して特定のセットを選択できることなど、多くの利点もあります。
データベースを圧縮すると、さまざまなCRUD操作(挿入、削除、更新など)によってストレージが断片化されるため、失われたスペースが再利用されます。また、テーブルとインデックスを再グループ化して、検索をより効率的にします。これはで行われます
「ツール」メニュー+「データベースユーティリティ」+「データベースのコンパクト化と修復...」
あなたは実際に MS Access の限界を押し上げています — ファイルが 2GB より大きくなることはできないことを知っていますか?
追加の正規化によるスペース節約の可能性について、データをすでに調べていると思いますか? 前の月のテーブルの一部を個別の MDB ファイルに「アーカイブ」してから、それらを「現在の」データベースに (永続的にまたは必要に応じて) リンクすることができます (その場合、そうでなければおそらく悪い決定だったものから実際に利益を得ることができます)。毎月新しいテーブルを開始します)。
しかし、これだけの量のデータがあれば、より大容量のプラットフォームへの移行計画を開始する時期に来ていると言えます。
あなたは本当にあなたのdbアーキテクチャについて考える必要があります。テーブル間にリンクがない場合は、短期的な解決策として、テーブルの一部を別のデータベースに移動することを試みることができます(1年に1データベース:)。
いくつかの「ストローをつかむ」アイデア
各列のデータ型を見てください。一部の数値をバイトとして保存して、レコードごとに少量を節約できる場合があります
インデックスを見て、使用しないインデックスを削除します。大きなテーブルでは、不要なインデックスが大量のオーバーヘッドを追加する可能性があります。
+ 2 ^ 64データベースの設計が少し奇妙であるという提案がありますが、まだ言われていないことは何もないので、その点については苦労しません
まあ.. @Larryに耳を傾け、長期的には、データを保持するために別のデータベースを見つける必要があることに注意してください!
しかし、短期的には、この「1 か月に 4 つの新しいテーブル」ということにかなり悩まされています。1 か月あたり 4 つのテーブルは 1 年あたり 50 です ... これは、ここにいるすべての「データベース管理者」にとって確かに奇妙に聞こえます。では、何行、どのように作成され、何のために作成され、なぜ毎月テーブルを作成する必要があるのか教えてください。
データの処理内容によっては、いくつかのテーブルを XML ファイル (または XLS?) としてアーカイブすることも考えられます。これは、リレーションやビューなどを通じてアクセスする必要のない「履歴」データには意味があります。1 つの良い例は、PABX から収集された通話リストです。データは、ADODB レコードセットまたは transferDatabase メソッドを介して XML/XLS ファイルとして保存/ロードできます
毎月テーブルを追加する: これはすでに疑わしい態度であり、データの正規化に関しては疑わしいようです。
そうする場合、データベース構造もフィールド サイズ、データ型、およびインデックスに関して最適化されていないと思われます。私は本当にそれらを再確認することから始めます。
月次テーブルを使用する正当な理由がある場合 (これも想像できません)、月に 1 つのバックエンドを使用しない理由はありません。
また、たとえば 3 か月分のデータをオンラインでメインのバックエンドに配置し、次に古いレコードを転送するアーカイブ データベースを配置することもできます。
私はこれをトランザクションに使用し、メイン テーブルには約 650.000 レコードがあり、Access は非常に応答性が高いです。