gpt4 book ai didi

database - 微软 Access : index optimisation

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

假设我们有一个 [Valuations] 表,其中包含每个日期和每个基金的多个值:
-FundId
-验证日期
-值1
-值 2...

主键显然是FundId+ValDate。
我还索引了 ValDate 字段,因为我经常查询特定日期的值。

我的问题是:我是否还应该为 FundId 创建一个特定的索引,或者 MsAccess 是否足够聪明以在查询特定的 FundId 时使用主键?

最佳答案

The Primary key is obviously FundId+ValDate

按什么顺序?您如何 Access 您的数据?

Access 数据库引擎使用 PRIMARY KEY 作为聚集索引。如果你这样做了

主键(FundId,ValDate)

然后你会在磁盘上得到一个不同于你这样做的顺序

主键(ValDate,FundId)

要在使用 Access GUI 时显示 PK 中列的顺序(如果您没有使用 SQL DDL 创建 PRIMARY KEY):在表设计 View 中,单击索引按钮,或在 View 菜单中启用索引。该列表将显示所有索引,对于多个字段的索引,它显示顺序,您可以更改顺序。

聚集索引中列的顺序很重要,因为它定义了表的唯一物理索引,可以说是您的 super 索引。

(ValDate, FundId) 将支持 BETWEEN(或等效)谓词或 ValDate 上的 GROUP BY,例如返回多个资金的日期范围查询。

(FundId, ValDate) 前者可能有利于基金特定查询……或者可能鼓励页面锁定,具体取决于值的生成方式……

您现在应该得到的印象是性能问题涉及许多变量:PK 的定义方式、键值的生成、压缩文件的频率、锁定策略(例如页面级别或行级别?)、高或低事件环境等。更不用说您针对表运行的查询的性质(例如按日期或按键?)

are you sure Access supports clustered indexes ?

当然,这里是 MSDN 上的一些重要文章:

New Features in Microsoft Jet Version 3.0“压缩数据库现在导致索引以聚集索引格式存储。虽然聚集索引在下一次压缩之前不会维护,但性能仍然得到改善。这与存储数据行的 Microsoft Jet 2.x 不同它们的输入方式。新的聚集键紧凑方法基于表的主键。输入的新数据将按时间顺序排列。”

Defragment and compact database to improve performance in Microsoft Access“如果表中存在主键,则压缩将表记录恢复为它们的主键顺序。这提供了与非维护聚集索引等效的功能,并使 Microsoft Jet 数据库引擎的预读功能更加高效......查询速度将显着提高,因为他们现在正在处理已重写到连续页面中的表中的数据。扫描顺序页面比扫描碎片页面快得多。”

How To Optimize Queries in Visual Basic“本文假设您正在使用 Microsoft Jet 数据库引擎……随着您的数据库的增长,它会变得碎片化。压缩将一个表中的所有数据写入硬盘上的连续页面,从而提高顺序扫描的性能。”

Information about query performance in an Access database“当您压缩数据库时,您可以加快查询速度。当您压缩数据库时,表的记录会重新组织,以便记录驻留在按表的主键排序的相邻数据库页面中。这提高了性能表中记录的顺序扫描,因为现在只需读取最少数量的数据库页面即可检索所需的记录。”

关于database - 微软 Access : index optimisation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1928447/

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