前面的推文我们掌握了SQL数据库监控与调优技术。今天给大家分享索引调优技术。后续文章都会系统分享干货,带大家从0到1学会性能测试。
索引可以用来解决很多性能问题,索引是用于提供对数据快速访问的一种方式,在对数据库进行调优时,索引是我们首先需要关注的内容,故索引调优是数据库调优的一个重要内容。
01索引原理
在SQL Server中,索引是按B树(平衡树)结构进行组织的,索引B树中的每一页称为一个索引节点,B树的顶端节点称为根节点,索引中的底层节点称为叶节点,根节点与叶节点之间的任何索引级别统称为中间级,当加入新的数据时,为了保证需要相同次数的读取来找到每个页,中间级页会进行拆分生成新的层,如图11-38所示
每个层的宽度增加为上一层能够记录的页数,当现有的树不能记录更多的页时,则会创建一个新的层,索引记录的大小受到编入索引列的大小影响,因此编入索引列越窄,则可以放到一个页的索引越多,从而索引需要的层数越少,每一层需要1次逻辑读,所以索引树层次越少越好。
02填充因子
填充因子是指每个叶子层页填充数据的百分比,提供填充因子选项是为了优化索引数据存储和性能,使用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 Database Engine