首页 > 编程知识 正文

oracle索引的使用和优化,填充因子与哪些物理量有关

时间:2023-05-03 09:42:39 阅读:108072 作者:4650

在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。

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