MS Access数据库引擎表中的最大行数?

one*_*hen 14 ms-access jet ms-jet-ace

我们知道MS Access数据库引擎被"限制"以允许最大文件大小为2GB(或者可能内部连线被限制为少于2KB的4KB数据页的某些功率).但这在实践中意味着什么呢?

为了帮助我衡量这一点,您能告诉我可插入MS Access数据库引擎表的最大行数吗?

为了满足表的定义,所有的行必须是唯一的,因此唯一约束(例如PRIMARY KEY,UNIQUE,CHECK,数据宏等)是必需的.

编辑:我意识到有一个理论上的限制,但我感兴趣的是实际(并不一定是可行的)现实生活限制.

Dav*_*ton 12

一些评论:

  1. Jet/ACE文件在数据页中组织,这意味着当您的记录边界与数据页不对齐时,会有一定的松弛空间.

  2. 行级锁定将大大减少可能的记录数,因为它会强制每个数据页一个记录.

  3. 在Jet 4中,数据页面大小增加到4KB(从Jet 3.x中的2KB).由于Jet 4是支持Unicode的第一个Jet版本,这意味着您可以存储1GB的双字节数据(即1,000,000,000个双字节字符),并且打开Unicode压缩,2GB数据.因此,记录的数量将受到是否启用Unicode压缩的影响.

  4. 由于我们不知道Jet/ACE文件中有多少空间被标题和其他元数据占用,也不知道房间索引存储需要多少空间,因此理论计算总是在实用的范围内.

  5. 为了获得最有效的存储空间,您需要使用代码来创建数据库而不是Access UI,因为Access会创建纯Jet不需要的某些属性.这并不是说有很多这些,因为设置为Access默认值的属性通常根本没有设置(仅当您从默认值更改属性时才创建属性 - 这可以通过循环遍历字段来看到属性集合,即为Access表设计器中的字段列出的许多属性在属性集合中没有,因为它们尚未设置),但您可能希望将自己限制为特定于Jet的数据类型(超链接字段)例如,仅限访问权限).

我只是浪费了一个小时来使用Rnd()来填充定义为类型字节的4个字段,在四个字段上使用复合PK,并且需要永久地附加足够的记录以获得2GB的任何重要部分.超过200万条记录,该文件低于80MB.达到刚过,我终于放弃700K 700万的记录和压实,以184MBs文件.起床接近2GB所需的时间比我愿意投入的时间多!

  • 我要停下来过夜。该数据库现在有 2170 万条记录(最后一批中有 1100 万条记录被欺骗并被拒绝),压缩后只有 600MB 多一点。我生成唯一记录的方法显然不如以前有效,所以我想我现在就停下来。 (2认同)

one*_*hen 9

这是我的尝试:

我创建了一个INTEGER没有键的单列()表:

CREATE TABLE a (a INTEGER NOT NULL);
Run Code Online (Sandbox Code Playgroud)

从1开始依次插入整数.

当它插入65,632,875行时,我停止了它(在几个小时之后任意).文件大小为1,029,772 KB.

我压缩了文件,将其略微减少到1,029,704 KB.

我加了一个PK:

ALTER TABLE a ADD CONSTRAINT p PRIMARY KEY (a);
Run Code Online (Sandbox Code Playgroud)

它将文件大小增加到1,467,708 KB.

这表明最大值大约在8000万大关.


Ton*_*ews 5

正如其他人所说,它是您的架构和索引数量的组合。

一位朋友在接近 2 Gb 限制的 MDB 中有大约 100,000,000 个历史股票价格、每日收盘报价。

他使用 Microsoft 知识库文章中的一些代码将它们拉下来。我很惊讶他使用的任何服务器在前 10 万条记录后都没有切断他的联系。

他可以在一秒钟内查看任何记录。