JET_SPACEHINTS 结构

适用于: Windows |Windows Server

JET_SPACEHINTS 结构

当 b 树通过追加或热点拆分增长时, JET_SPACEHINTS 结构包含有关空间分配模式的信息。 将记录添加到 b 树的末尾时,会发生追加拆分;将多个记录添加到同一个虚拟插入点时会发生热点拆分 (例如,将“Marie”、“Mark”、“Martin”、“Mary”添加到按字母顺序) 排序的 b 树中间。

Windows 7: windows 7 中引入了 JET_SPACEHINTS 结构。

    typedef struct tagJET_SPACEHINTS {
      unsigned long cbStruct;
      unsigned long ulInitialDensity;
      unsigned long cbInitial;
      JET_GRBIT grbit;
      unsigned long ulMaintDensity;
      unsigned long ulGrowth;
      unsigned long cbMinExtent;
      unsigned long cbMaxExtent;
    } JET_SPACEHINTS;

成员

cbStruct

此结构的大小(以字节为单位)。 将此成员设置为 sizeof ( JET_SPACEHINTS ) 。

ulInitialDensity

追加) 布局 (密度。

cbInitial

正在创建的对象) 初始大小 (字节数。 这必须是数据库页大小的倍数。

grbit

一组位,其中包含要用于此结构的选项,其中包括以下零个或多个内容。

含义

JET_bitSpaceHintsUtilizeParentSpace
0x00000001

更改内部分配策略,以从 b 树的直接父级获取空间。

JET_bitCreateHintAppendSequential
0x00000002

允许追加拆分行为根据 cbMinExtent、ulGrowth、cbMaxExtent) 设置的表 (增长动态进行增长。

JET_bitCreateHintHotpointSequential
0x00000004

允许热点拆分行为根据 cbMinExtent、ulGrowth、cbMaxExtent) 设置的表 (增长动态增长。

JET_bitRetrieveHintTableScanForward
0x00000010

如果设置,客户端会指示向前顺序扫描是此表的主要使用模式。

JET_bitRetrieveHintTableScanBackward
0x00000020

如果设置,客户端指示向后顺序扫描是此表的主要使用模式。

JET_bitDeleteHintTableSequential
0x00000100

如果设置,应用程序希望按顺序(从最低键到最高键)清理此表。

ulMaintDensity

density to mulMaintDensity

要维持的密度。 如果空格提示指定JET_bitRetrieveHintTableScanForward或JET_bitRetrieveHintTableScanBackward,则当表中已用空间低于此阈值时,将触发表碎片整理。 可以通过将此成员设置为零来禁用表碎片整理。 将此成员设置为 100 将导致表碎片整理在页面释放后立即运行。

ulGrowth

从上次增长或初始大小开始的百分比增长,舍入到最接近的本机 JET 分配大小。

cbMinExtent 太小

如果过小,这将替代 ulGrowth。

cbMaxExtent

增长的最大值(以字节为单位)。 此上限为 ulGrowth。

当 b 树通过追加或热点拆分(而不是随机记录插入) ) (增长时,表将增长的空间量计算如下:

  1. 在创建时,我们始终为 b 树 cbInitial 提供 。

  2. 在给定区域的第一次分配期间,我们将分配:cbInitial * ulGrowth / 100 (舍入为 DB 的页大小) ,或 cbMinExtent(如果更大)。

  3. 在下一次分配期间,cbLastAlloc * ulGrowth / 100 (舍入到 DB) 的页大小;如果更大,则为 cbMinExtent。

  4. 在某些分配 ((可能是第一个分配) ),计算的大小将超过 cbMaxExtent,之后将是增长大小。

要求

要求

客户端

需要 Windows Vista、Windows XP 或 Windows 2000 专业版。

服务器

需要 Windows Server 2008、Windows Server 2003 或 Windows 2000 Server。

标头

在 Esent.h 中声明。

另请参阅

JET_TABLECREATE2
JET_TABLECREATE3