Accessデータベースの分割方法

Accessは、100万レコードでもサクサク


当社が使用中の受注管理db(Access)のテーブルの一つは、レコード数が100万件となり今後も増加が続く見込み。100万件を超えてもサクサク動いているAccessは凄い。

しかし、Accessのデータサイズは噂によると2GBまでらしく、そのうち限界となる。そこに至らなくても2GBはちょっと重いと思う、個人的には500MB以下が理想。


Accessのメリット、ワンファイル


Accessのメリットを書き始めると長くなるのでここは一つ。テーブルもロジックも表示フォームもすべてワンファイルにまとまっているところ。

大きな企業のシステムを支えるようなデータベースなら、テーブルもロジックも個別に独立していた方がよいが、少人数による利用で、ネットでの共有もないデータベースなら、ワンファイルは本当に便利だと思う。

私自身OracleやMySQLのような本格的なSQLデータベースの経験がほぼないので(MySQLは、ネットプロバイダで無償提供されているが、中身をさわることはないので)、Accessとの比較はできないが、おそらく、プログラムを書けない人には圧倒的にAccessの方が便利だろう。


データベース分割


Accessには、ファイルサイズが巨大になったときの解決策も準備されている。そういうメニューがAccessにはある。これを実施すると全テーブルを別のdbファイルとして分割してくれる。

今回試したが、ネット共有の際には、利用できそうな予感だった。しかし、dbが分割され2個のファイルになることが苦痛だった。

私は、サイズを重くしている特定のテーブルだけを手動でエクスポート(分割)して「テーブルリンク」で接続する方式を試したが、ファイルが複数になる点、全体としてサイズが軽くなるわけでない点(むしろ、トータルでは増加する)で、あまり意味がないと感じた。

繰り返すが、テーブルの外出しは、思いつくメリットは、外出しdbを共有ファイルにしてAccessを複数のスタッフでネット共有(ロジック部分は個別に配布)することくらいか。


テーブル分割


重いテーブルは限られている。しかも、古いデータは滅多に使われない。それならば、テーブル単体自体を分割してみようと考えている。

古いデータのほとんどは、年に数回、使う程度。そこで現在のdbをバックアップとして保存し、その後、現dbから重いテーブルの古いデータを削除する。古いデータを調べる際は、バックアップdbにて行う。


(1)最新dbをバックアップとして保存

(2)バックアップ後、重いテーブルの過去3年以上の古いデータを削除

(3)次回のバックアップ時は、バックアップdbから古いテーブルデータを戻す
 (※古いテーブルがあるバックアップdbのクエリから「追加クエリ」で、追加先に最新dbの同じテーブルにする。レコードが重複するとキー違反になるので重複レコードがないこと)
 (※インポートで戻すと最新のテーブルデータも上書きされるので、必ず"追クエリ"で戻すこと)

(4)上記の(1)(2)を繰り返す


実際の運用で確かめる


テーブルデータのうち、過去3年以上のものは、滅多に使うことがないのに毎回、起動する度にメモリに読み込んだり、バックアップを取る度にこういうデータをコピーしなおさなくてよいので、効率的だと思う。


デメリットは、dbの運用が若干複雑になること、それ以外は、今のところ思いつかない。どんなデメリットがあるか、実際の運用で確かめたい。



  • (2017-11-14 07:06:04)
<< Amazonの露骨なプライムびいき< | >画像のぼかし >>
search
layout
category
links
admin

[▲page top]