首页 > 编程知识 正文

oracle索引有哪几种类型,数据库索引有哪几种

时间:2023-05-06 21:10:40 阅读:108067 作者:2460

在SQL SERVER的索引原理和填充因子SQL SERVER中,索引由b树结构组织,索引b树的各页被称为索引节点,b树的最上位节点被称为根节点,索引的下位节点添加新数据时,所有页面的读取次数必须相同

每个层的宽度都会增加到上一个层可以记录的页数,如果现有树不能记录更多的页面,则会创建一个新层。 由于索引记录的大小受索引列的大小的影响,索引列越窄,可以配置在一页上的索引越多,索引所需的层数越少,每层需要一次逻辑读取,因此索引

填充因子是输入到每个叶级页面的数据的百分比。 提供了填充因子选项,以优化索引的数据存储和性能。 使用fill factor选项,可以指定在Microsoft SQL Server使用现有数据创建新索引时,每页的填充量。 fill factor选项是高级选项,如果使用sp_configure系统存储过程更改此设置,则只有在show advanced options设置为1时才能更改fill factor。 设置在重新启动服务器后生效。

创建或重新生成索引时,填充因子的值将确定每个叶级页中填充数据的空间百分比。 这将确保以后可用于扩展索引的空间百分比。 例如,如果将填充因子值指定为80,则在每个叶级页面上有20%的空间保留为空,并在向基础表添加数据时为扩展索引保留空间。

填充因子可以设置为1到100之间的百分比。 在大多数情况下,整个服务器的默认值为0。 如果将填充因子设置为0,则会填充整个叶级页面,但实际测试不会设置为填充整个叶级页面。 由于至少需要一个额外的索引行空间,因此此设置可以有效利用叶级空间,但在必须拆分页面之前需要进行有限的扩展。

注意:填充与设置为0和设置为100意义相同,意味着要填充整个叶级页面。 只有在创建或重新生成索引后,填充因子才适用。 SQL server数据库引擎不会在页中动态维护指定的可用空间百分比。 尝试在数据页上保留额外的空间与使用填充因子的意图相反。 因为随着数据的输入,数据库引擎必须在每页上进行分页,以保持填充因子指定的可用空间百分比。

向已满的索引页添加新行时,数据库引擎会将大约一半的行移动到新页中,为该新行留出空间。 这种重组称为页面分割。 虽然分割页面为新记录留出了空间,但执行分割页面可能需要一些时间,并且会占用大量资源。 此外,还可能出现碎片,增加I/O操作,直接影响数据库性能。 如果正确选择了填充因子值,则在向基础表中添加数据时,将有足够的空间来扩展索引,从而降低分页的可能性。 如果经常发生分页,则可以通过使用新的填充因子值或现有的填充因子值重新生成索引来重新分发数据。

使用较小的非0填充因子值时,随着索引的增加,不需要拆分页面,但索引需要更多的存储空间,从而降低读取性能。 对于许多插入和更新操作的APP应用程序,读取数据库的次数通常超过写入数据库的5~10倍。 因此,指定与默认值不同的填充因子会导致数据库读取性能下降,并与填充因子设置的值成反比。 例如,如果填充因子值为50,则数据库读取性能将加倍,因为索引包含更多页,从而增加了检索数据所需的磁盘I/O。

索引中的填充因子是什么意思

如果有装满水的玻璃杯,请试着往这个玻璃杯里加水。 结果会怎么样呢? 水溢出来。

SQL Server的情况也是如此。 如果尝试在索引页已满时添加新行,SQL Server会将大约一半的行移动到新页,为新添加的行腾出空间。 这就是俗称的“页面分割”。 虽然分页为新记录留出了空间,但它会占用大量时间和资源,可能会导致碎片并对I/O操作产生负面影响。 那么,如何避免这种情况呢?

为了防止这种情况,需要积极确定填充因子的值。 在创建或重建索引后,填充因子的值确定用于在每个叶级页面中填充数据的空间百分比,并保留其馀部分以供将来扩展。 例如,如果将填充因子值设置为60,则向基础表中添加数据时,每个叶级别页面的40%将为空,以留出用于索引扩展的空间。

缺省填充因子值始终为0,适用于大多数情况。 一般来说,如果填充因子值为0,则叶级别几乎已满,但至少有空间可以添加一个索引行。 (请注意,填充因子0和100相似。 )

sql索引的填充因子多少最好,填充因子有什么用?和索引重建最相关的是填充因子。 如果要创建新索引或重建现有索引,则可以指定填充因子,该填充因子是创建索引时索引中数据页已填充的数量。 将填充因子设置为100意味着每个索引页100%已填充,而50%意味着每个索引页50%已填充。

如果为非单调递增的列创建填充因子为100的聚集索引,则意味着每次插入(或修改)记录时都会发生分页,因为现有页面中没有这些数据的空间。 许多页面分割会降低sqlserver的性能。

列举

个例子:假定你刚刚用缺省的填充因子新创建了一个索引。当sqlserver创建它时,它把索引放在相邻的物理页面上,因为数据能够顺序的读所以这样会有最优的i/o访问。但当表随着、、增加和改变时,发生了页拆分。当页拆分发生时,sqlserver必须在磁盘的某处分配一个新的页,这些新的页和最初的物理页不是连续的。因此,访问使用的是随机的i/o,而不是有顺序的i/o,这样访问索引页会变得更慢。
   
   那么理想的填充因子是多少呢?它依赖于应用程序对sqlserver表的读和写的比率。首要的原则,按照下面的指导:
   
   低更改的表(读写比率为100:1):100%的填充因子
   
   高更改的表(写超过读):50-70%的填充因子
   
   读写各一半的:80-90%的填充因子
   
   在为应用程序找到最优的填充因子前也不得不进行试验。不要假定一个低的填充因子总比高的好。低的填充因子会减少页拆分,它也增加了sqlserver查询期间读的页数量,从而减少性能。太低的填充因子不仅增加i/o开销,也影响缓存。当数据页从磁盘移到缓存中时,整个页(包括空的空间)都移到缓存中。所以填充因子越低,不得不移到sqlserver缓存中的页面就越多,意味着同时为其他重要数据页驻留的空间就少,从而降低性能。
   
   如果你没有指定填充因子,缺省的填充因子时0,意味着100%的填充因子(索引的叶页100%的填满,但索引的中间页有预留的空间)。
   
   作为监控的一部分,你要决定新建索引或重建索引时的填充因子是多少。事实上,除了只读数据库,所有的情况,缺省值0都是不适合的。相反,你想要一个填充因子保留合适的自由空间,按照上面的讨论来做。

转载:

SQL SERVER索引原理及填充因子 - 知乎

索引里面的填充因子是什么意思-CSDN论坛

sql索引的填充因子多少最好,填充因子有什么用 - 巴蒂青葱 - 博客园

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。