gpt4 book ai didi

database - Access 2007 中数据的物理存储

转载 作者:搜寻专家 更新时间:2023-10-30 23:23:51 25 4
gpt4 key购买 nike

我一直在尝试估算具有一定数量记录的 Access 表的大小。

它有 4 个 Long(每个 4 个字节)和一个 Currency(8 个字节)。

理论上:1 条记录 = 24 字节,500,000 = ~11.5MB

但是,accdb 文件(即使在压缩之后)增加了近 30MB(每条记录约 61 字节)。用于填充的一些额外字节不会那么糟糕,但 2.5X 似乎有点过分 - 即使对于 Microsoft 膨胀也是如此。

有什么差异?四个 long 是复合键,这有关系吗?

最佳答案

这是我的测试结果,所有测试均使用 A2003 MDB 而不是 A2007 ACCDB:

      98,304 IndexTestEmpty.mdb
131,072 IndexTestNoIndexesNoData.mdb
11,223,040 IndexTestNoIndexes.mdb
15,425,536 IndexTestPK.mdb
19,644,416 IndexTestPKIndexes1.mdb
23,838,720 IndexTestPKIndexes2.mdb
24,424,448 IndexTestPKCompound.mdb
28,041,216 IndexTestPKIndexes3.mdb
28,655,616 IndexTestPKCompoundIndexes1.mdb
32,849,920 IndexTestPKCompoundIndexes2.mdb
37,040,128 IndexTestPKCompoundIndexes3.mdb

我认为这些名称应该是不言自明的。我使用带有 Rnd() 的追加查询来追加 524,288 条虚假数据记录,这使文件变成了 11MB。我在其他字段上创建的索引都是非唯一的。但是,如果您看到复合 4 列索引的大小从 11MB(无索引)增加到远远超过 24MB。第一列的 PK 仅将大小从 11MB 增加到 15.4MB(当然使用假 MB,即,如硬盘制造商)。

请注意每个单列索引如何使文件大小增加大约 4MB。如果你认为没有索引的 4 列总计 11MB,根据我上面的评论,这似乎是正确的,即每个索引应该增加文件大小,大约是被索引字段中的数据量。我惊讶于聚簇索引也这样做了 -- 我认为聚簇索引会使用更少的空间,但事实并非如此。

为了比较,第一列上的非 PK(即非聚集)唯一索引,从 IndexTestNoIndexes.mdb 开始,与第一列作为 PK 的数据库的大小完全相同,因此没有空间节省完全来自聚簇索引。万一索引字段的顺序位置可能会有所不同,我还尝试了仅在第二列上使用唯一索引,结果大小完全相同。

现在,我没有仔细阅读您的问题,并省略了 Currency 字段,但如果我将其添加到非索引表和具有复合索引的表中并用随机数据填充它,我会得到这个:

      98,304 IndexTestEmpty.mdb
131,072 IndexTestNoIndexesNoData.mdb
11,223,040 IndexTestNoIndexes.mdb
15,425,536 IndexTestPK.mdb
15,425,536 IndexTestIndexUnique2.mdb
15,425,536 IndexTestIndexUnique1.mdb
15,482,880 IndexTestNoIndexes+Currency.mdb
19,644,416 IndexTestPKIndexes1.mdb
23,838,720 IndexTestPKIndexes2.mdb
24,424,448 IndexTestPKCompound.mdb
28,041,216 IndexTestPKIndexes3.mdb
28,655,616 IndexTestPKCompoundIndexes1.mdb
28,692,480 IndexTestPKCompound+Currency.mdb
32,849,920 IndexTestPKCompoundIndexes2.mdb
37,040,128 IndexTestPKCompoundIndexes3.mdb

比较的要点是:

  11,223,040 IndexTestNoIndexes.mdb
15,482,880 IndexTestNoIndexes+Currency.mdb
24,424,448 IndexTestPKCompound.mdb
28,692,480 IndexTestPKCompound+Currency.mdb

因此,货币字段又增加了 4.5MB,其索引又增加了 4MB。如果我将非唯一索引添加到第二个、第三个和第四个长字段,数据库将增加 41,336,832,并且大小增加将近 12MB(或每个附加索引约 4MB)。

那么,这基本上复制了您的结果,不是吗?粗略地说,我最终得到了相同的文件大小。

您的问题的答案是索引,尽管 A2007 ACCDB 格式的开销明显更多,因为我看到大小仅增加了 20MB,而不是 30MB。

我确实注意到的一件事是我可以实现一个索引使文件变大,然后删除索引并压缩,它会恢复到与以前完全相同的文件大小,因此您应该能够获取数据库的单个副本并试验删除索引对文件大小的影响。

关于database - Access 2007 中数据的物理存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2484908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com