みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

データベースの圧縮について

ACCESS97を使用している者ですが、分からないことがあります。
VBのCompactDatabaseメソッドで最適化されたデータベースをLHAで圧縮しようとすると、LZHファイルはできるのですが、圧縮率100%、つまり容量が全く減りません。
おそらく、LHAの圧縮とCompactDatabaseメソッドが同じような処理を行っているからだとは思うのですが、
その裏づけとなる理屈が全くわかりません。
どなたか、説明して頂けますでしょうか?
宜しくお願い致します。

投稿日時 - 2005-03-19 00:16:03

QNo.1277857

すぐに回答ほしいです

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

#2です
「最適化」の中味を試験してみました。データベースにより違いはあるでしょうが。

環境:Pen4 1.5GH + 523KB RAM + Win2K SP2 + Delphi Vwe.6 UP2 + Microsoft.Jet.OLEDB.4.0

1.新規DBにテーブルを一つ作成。オートナンバー型フィールドと文字型(50文字)のフィールド一つ
2.40文字のレコードを100件追加
3.全てのレコード削除
4.最適化
5.40文字のレコードを100件追加
6.上記100レコードの40文字を10文字に変更
7.最適化
8.テーブルの複写
9.複写したテーブルの削除
10最適化

上記を実行すると mdb のサイズ(バイト)は以下のようになります
1.114688
2.122880
3.122880
4.114688
5.122880
6.122880
7.118784
8.139264
9.139264
10.118784

このことから判るのは、レコードの削除、文字列の縮小、テーブルの削除がなされても、データーベースは「隙間」を詰めないということです。
理由はこの作業が頻繁におこると、パフォーマンスが大幅に落ちてしまうし、何かのタイミングで「最適化」を行うのが良いとしても、データーベースには判らないためでしょう。

投稿日時 - 2005-03-19 12:20:11

お礼

ご丁寧なご回答ありがとうございます。
fuuten_no_neko様のご回答の内容から、2.、6.、9.の時点で圧縮を行い、データベースの容量を比較してみれば、一応の答えとなりそうです。
また、圧縮できないデータベースには、CompactDatabaseの他にRepairDatabaseメソッドも行われていました。ヘルプなどによると、このメソッドは、ACCESS97のメニューバーより選択できる「修復」と同じような処理を行うということで、これも関係しているのかもしれません。
ちなみに、ACCESS2000以降は、最適化と修復は一緒に行われている、と言うことです。
自分でも色々やってみます。ありがとうございます。

投稿日時 - 2005-03-19 16:01:20

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(5)

まさかデータ型が「OLE オブジェクト型」で、そこに圧縮された .jpg や .lzh が入っていることはないですよね?

ところで、何故圧縮が必要か、明らかにされると別の解決策が示されるかもしれません。その場合は、今後このスレッドを読む人が少ないであろうことを考えれば、新規質問にした方がよろしいでしょう。

投稿日時 - 2005-03-20 13:24:27

お礼

ご回答ありがとうございます。
>まさかデータ型が「OLE オブジェクト型」で、そこに圧縮された .jpg や .lzh が入っていることはないですよね?

初心者なものでよくわかりませんが、おそらくないと思われます。

>ところで、何故圧縮が必要か、明らかにされると別の解決策が示されるかもしれません。その場合は、今後このスレッドを読む人が少ないであろうことを考えれば、新規質問にした方がよろしいでしょう。

ご丁寧なご指南ありがとうございます。
そうですね、また新規で質問させていただきます。
最後までありがとうございました。

投稿日時 - 2005-03-21 08:44:55

ANo.4

>CompactDatabase は「最適化」であって「圧縮」ではないはず
#1です。
そうですね、勘違いしていました、忘れてください。

投稿日時 - 2005-03-19 14:48:37

興味(疑問)が湧いたので試してみました。同一環境ではありません。
疑問とは、CompactDatabase は「最適化」であって「圧縮」ではないはずとの考えです。データベースで「圧縮」を行えば、著しく処理スピードが低下してしまいます。

環境:Access2000+VBA(DAO)+Win2k+LHUT32

VBA(DAO)はヘルプにあるサンプルコードそのままです。サンプルデータは既に最適化が行われているのでサイズに変わりはなく、もとの
C:\Program Files\Microsoft Office\Office\Samples\Northwind.mdb

と同じ 2,432kb

これに圧縮をかけたところ

39.5% の 985kb

となりました。

投稿日時 - 2005-03-19 07:49:23

お礼

ご回答ありがとうございます。
自分でも試してみましたが、教えて頂いたとおりの結果となりました。
私も「最適化」と「圧縮」の処理は違うはず、と考えこの質問を書いたのですが・・・。理屈がわからないもので。

投稿日時 - 2005-03-19 08:33:47

ANo.1

コンピュータでの圧縮といえば、例えば繰りかえし出現する単語を別の短いコードで表すなどの冗長性の削除によって圧縮します。
なので、充分圧縮されたコードはそれ以上に圧縮することができません。
場合によっては、圧縮されたファイルにある特徴があって、その特徴に応じた別の圧縮を掛けることでより圧縮できる場合もありますが、通常は圧縮されているファイルをより圧縮しようとすると、管理する部分でもとより大きくなる場合がほとんどです、そのような場合には、圧縮ソフトは実際には、圧縮処理を行いません。

投稿日時 - 2005-03-19 02:59:40

お礼

ご回答ありがとうございます。
と言うことは、ComapactDatabaseメソッドも圧縮と同じようにデータの冗長性の削除を行っていると言うことなのでしょうか。
もし、BLUEPIXYさんが詳しい理論等について説明しているサイトなどご存知でしたら、教えていただけないでしょうか?
重ね重ねの質問になってしまい申しわけありませんが、宜しくお願い致します。

投稿日時 - 2005-03-19 09:39:32

あなたにオススメの質問