0

正如问题所说。该表没有定义主键。数据库中的其他表在压缩后不会更改,并且也没有定义主键。

4

3 回答 3

2

“如果表中存在主键,则压缩会将表记录重新存储到它们的主键顺序中。这提供了非维护聚集索引的等价物,并使 Microsoft Jet 数据库引擎的预读功能更加高效。 "

ACC2000:碎片整理和压缩数据库以提高性能

“新的压缩方法。现在压缩数据库会导致索引以聚集索引格式存储。虽然聚集索引在下一次压缩之前不会维护,但性能仍然有所提高。这与 Microsoft Jet 2.x 不同,其中行"

Microsoft Jet 3.0 版中的新功能

这两篇文章都没有告诉您必须注意的一点:如果列UNIQUE上存在约束(或唯一索引),NOT NULL则将使用它来代替PRIMARY KEY. 我无法确定的是,如果UNIQUE表上有多个约束条件,ACE/Jet 如何选择一个:首先创建的?第一列的序数位置?第一NOT NULL列的序数位置?你的猜测和我的一样好。

于 2009-06-11T13:40:26.887 回答
1

桌子没有顺序。表格数据表可能,但那不是表格,而是用于显示表格的 UI 对象。

如果要控制表的顺序,请使用带有 ORDER BY 子句的 SQL 语句。

您不应该在应用程序中使用表格视图。

如果您没有应用程序并且您不喜欢默认顺序,请在表数据表上设置 ORDER BY 属性并保存它,或者使用您喜欢的顺序编写查询。

但是你需要放弃表格有任何顺序的想法。单纯的想法与 SQL 和集合论的基础是完全矛盾的。您不应该关心记录实际存储在物理数据库中的顺序。

于 2009-06-13T12:48:15.090 回答
0

如果没有主键,Access 可以自由地重新排列表中它认为合适的行。我的猜测是效果取决于表格的使用模式。当您删除一行时,数据库只是将其标记为已删除。压缩时,它会通过用未删除的行覆盖已删除的行来回收空间。如果一个表有一个主键,那么数据库将在这个过程中小心地保留行顺序(因此这是一个更昂贵的操作);否则,它不会。

于 2009-06-11T13:06:50.400 回答