`

SQLSERVER 索引 填充因子

阅读更多

首先SQL SERVER里面有四种索引类型。

1.唯一索引 :(创建唯一约束的时候自动生成唯一索引)

2.主键索引 :(创建主键时自动生成索引,是一种特殊的唯一索引,和唯一索引的区别是【唯一允许NULL值,主键不允许为空】。并且他是特殊的聚集索引)

3.聚集索引 :(自动会进行排序。每个表只能有一个。如果一个字段经常用来order by ,group by ,或者当作查询条件,那个这个字段有必设置成聚集索引)

4.非聚集索引 :(非聚集索引指定表的逻辑顺序。数据存储在一个位置,索引存储在另一个位置,索引中包含指向数据存储位置的指针。可以有多个,小于249个)

后面还要指定一个填充因子。填充因子:数据经常变化,填充因子就设置的越大,如果数据基本不变化,填充因子相对设置较小。(一般情况下只有不对数据进行操作时才进行此设置)。

创建索引时,可以指定一个填充因子,以便在索引的每个叶级页上留出额外的间隙和保留一定百分比的空间,供将来表的数据存储容量进行扩充和减少页拆分的可能性。

填充因子的值是从   0   到   100   的百分比数值,指定在创建索引后对数据页的填充比例。值为   100   时表示页将填满,所留出的存储空间量最小。只有当不会对数据进行更改时(例如,在只读表中)才会使用此设置。值越小则数据页上的空闲空间越大,这样可以减 少在索引增长过程中对数据页进行拆分的需要,但需要更多的存储空间。当表中数据会发生更改时,这种设置更为适当。

填充因子越大,意味着一个索引页包含的索引记录越多,空闲空间越小.一般来说查询的效率越高,因为这样查询的时候,可以减少读取索引页的工作量和减少内存使用  
但这样导致的结果是数据变动导致的索引维护的工作量增加,因为索引页的空闲空间小,如果不能在本页内完成索引调整,就会引起调整其他索引页 。


数据页
当索引建立起来的时候,SQLServer就建立数据页(datapage),数据页是用以加速搜索的指针。当索引建立起来的时候,其对应的填充因子也即 被设置。设置填充因子的目的是为了指示该索引中数据页的百分比。随着时间的推移,数据库的更新会消耗掉已有的空闲空间,这就会导致页被拆分。页拆分的后果 是降低了索引的性能,因而使用该索引的查询会导致数据存储的支离破碎。当建立一个索引时,该索引的填充因子即被设置好了,因此填充因子不能动态维护。

为了更新数据页中的填充因子,我们可以停止旧有索引并重建索引,并重新设置填充因子(注意:这将影响到当前数据库的运行,在重要场合请谨慎使用)。 DBCC INDEXDEFRAG和DBCC DBREINDEX是清除clustered和nonculstered索引碎片的两个命令。INDEXDEFRAG是一种在线操作(也就是说,它不会阻 塞其它表格动作,如查询),而DBREINDEX则在物理上重建索引。在绝大多数情况下,重建索引可以更好的消除碎片,但是这个优点是以阻塞当前发生在该 索引所在表格上其它动作为代价换取来得。当出现较大的碎片索引时,INDEXDEFRAG会花上一段比较长的时间,这是因为该命令的运行是基于小的交互块 (transactional block)。

分享到:
评论

相关推荐

    T-SQL查询高级—SQL Server索引中的碎片和填充因子.doc

    T-SQL查询高级—SQL Server索引中的碎片和填充因子.doc

    常用经典sql语句(sqlserver版)

    SQL Server 数据库管理常用的SQL和T-SQL语句 ...SQLSERVER 索引 填充因子 Server 中一个非常强大的日期格式化函数 根据表中数据生成insert语句的存储过程.txt 精妙的SQL语句.txt 事务处理.txt php_ADODB.txt

    SQLSERVER全文索引的使用

    该文档详述如何创建全文索引优化模糊查询,使用全文索引的填充因子避免漏查多查

    SQL Server数据库查询速度慢原因及优化方法

    注意填充因子要适当(最好是使用默认值0)。索引应该尽量小,使用字节数小的列建索引好(参照索引的创建),不要对有限的几个值的字段建单一索引如性别字段。 5、提高网速。 6、扩大服务器的内存,Windows 2000和...

    SQL Server误区30日谈 第25天 有关填充因子的误区

    误区 #25:多个有关填充因子的误区 都是错误的25a) 填充因子是一直存在的 不是的,通过Books Online可以看到(译者:我在新版的BOL没有找到这句话):重要: 填充因子仅仅在索引创建或重建时生效,SQL Server存储引擎并...

    SQLServer2008查询性能优化 2/2

    书名: SQLServer2008查询性能优化 作者: 弗里奇(Grant Fritchey) 出版社: 人民邮电出版社 出版日期: 2010年8月1日 ISBN: 9787115230294 编辑推荐 《SQL Server 2008查询性能优化》为你提供了处理查询性能所...

    SQLServer2008查询性能优化 1/2

    书名: SQLServer2008查询性能优化 作者: 弗里奇(Grant Fritchey) 出版社: 人民邮电出版社 出版日期: 2010年8月1日 ISBN: 9787115230294 编辑推荐 《SQL Server 2008查询性能优化》为你提供了处理查询性能所...

    优化 SQL Server 索引的小技巧

    我在这里只讨论两种SQL Server索引,即clustered索引和nonclustered索引。当考察建立什么类型的索引时,你应当考虑数据类型和保存这些数据的column。同样,你也必须考虑数据库可能用到的查询类型以及使用的最为频繁...

    SQL-Server-Fill-Factor-Determination:为 SQL Server 数据库中的每个索引确定和分配填充因子的过程

    SQLAgentScriptRebuildIndexes.sql 是我每晚作为 SQL 代理作业运行的脚本,它扰乱平均碎片大于 1.2% 的索引并跟踪碎片以确定和设置填充因子。 该脚本仍在不断发展,可能每天都在变化。 我正在努力将这两个脚本放入...

    SQL Server 数据库索引其索引的小技巧

    一、什么是索引 减少磁盘I/O和逻辑读次数的最佳方法之一就是使用【索引】 索引允许SQL Server在表中查找数据而不需要扫描整个表。...所以SQLServer能从一个非聚集索引的页面中读到比包含该列的表也

    SQL Server系统调优解决方案

    2. 为索引指定填充因子,可标识填充因子来指定每个索引页的填满程度。索引页上的空余空间量很重要,因为当索引页填满时,系统必须花时间拆分它以便为新行腾出空间。  优化索引 1. 重建索引(dbcc dbreindex) 2. ...

    sqlserver2008sql.rar

    sqlserver常用函数大全第一个参数是要重建索引的表名,第二个参数指定索引名称,空着就表示所有,第三个参数叫填充因子,是指索引页的数据填充程度,0表示使用先前的值,100表示每个索引页都填满,这时查询效率最高...

    sql 优化汇总 优化汇总 优化汇总

    1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2、I/O吞吐量小,形成了瓶颈效应。 3、没有创建计算列导致查询不优化。 4、内存不足 ...注意填充因子要适当(最好是使用默认值0

    java源码包---java 源码 大量 实例

     Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...

    java源码包2

     Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...

    java源码包3

     Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...

    java源码包4

     Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    java求一个整数的因子 如题。 Java生成密钥的实例 1个目标文件 摘要:Java源码,算法相关,密钥 Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(key...

Global site tag (gtag.js) - Google Analytics