SQLServer系统调优解决方案
索引简介 索引是根据数据库表中一个或多个列的值进行排序的结构。索引提供指针以指向存储在表中指定列的数据值,然后根据指定的排序次序排列这些指针。 数据库使用索引的方式与使用书的目录很相似,通过搜索索引找到特定的值,然后跟随指针到达包含该值的行。 索引键:用于创建索引的列。 索引类型 聚集索引: 聚集索引基于数据行的键值在表内排序和存储这些数据行。由于数据行按基于聚集索引键的排序次序存储,因此聚集索引对查找行很有效。每个表只能有一个聚集索引,因为数据行本身只能按一个顺序存储。数据行本身构成聚集索引的最低级别(叶子节点)。只有当表包含聚集索引时,表内的数据行才按排序次序存储。如果表没有聚集索引,则其数据行按堆集方式存储。聚集索引对于那些经常要搜索范围值的列特别有效。使用聚集索引找到包含第一个值的行后,便可以确保包含后续索引值的行在物理相邻。例如:如果应用程序执行的一个查询经常检索某一日期范围内的记录,则使用聚集索引可以迅速找到包含开始日期的行,然后检索表中所有相邻的行,直到到达结束日期。这样有助于提高此类查询的性能。同样,如果对从表中检索的数据进行排序时经常要用到某一列,则可以将该表在该列上聚集(物理排序),避免每次查询该列时都进行排序,从而节省成本。 非聚集索引 非聚集索引具有完全独立于数据行的结构。非聚集索引的最低行包含非聚集索引的键值,并且每个键值项都有指针指向包含该键值的数据行。数据行不按基于非聚集键的次序存储。如果一个表只有非聚集索引,它的数据行将按无序的堆集方式存储,非聚集索引可以建多个。 唯一索引 唯一索引可以确保索引列不包含重复的值。在多列唯一索引的情况下,该索引可以确保索引列中每个值组合都是唯一的。唯一索引既是索引也是约束。 复合索引 索引项是多个的就叫组合索引,也叫复合索引。复合索引使用时需要注意索引项的次序。 索引对性能的作用 使用索引的优点 1. 通过唯一性索引(unique)可确保数据的唯一性 2. 加快数据的检索速度 3. 加快表之间的连接 4. 减少分组和排序的时间 使用索引的原则 1. 在需要经常搜索的列上创建索引 2. 经常用于连接的列上创建索引 3. 经常需要根据范围进行搜索的列上创建索引 4. 经常需要排序的列上创建索引 5. 经常用于where子句的列上创建索引 不使用索引的原则 1. 查询很少使用和参考的列不建索引 2. 对只有少数值的列不建索引 3. 定义为text、image、bit的列不建索引 4. 当需要update性能远远高于select性能时不建或少建索引 常用命令 1. sp_helpindex : 报告表或视图上的索引信息 2. dbcc showcontig :显示指定表的数据和索引的碎片信息 3. dbcc dbreindex :重建指定数据库中一个或多个索引 4. dbcc indexdefrag :整理指定表或视图的聚集索引或辅助索引的碎片 创建索引 1. 定义索引时,可以指定每列的数据是按升序还是降序存储。如果不指定,则默认为升序 2. 为索引指定填充因子,可标识填充因子来指定每个索引页的填满程度。索引页上的空余空间量很重要,因为当索引页填满时,系统必须花时间拆分它以便为新行腾出空间。 优化索引 1. 重建索引(dbcc dbreindex) 2. 索引优化向导 3. 整理指定的表或视图的聚集索引和辅助索引碎片(dbcc indexefrag) 非聚集索引 非聚集索引具有完全独立于数据行的结构。非聚集索引的最低行包含非聚集索引的键值,并且每个键值项都有指针指向包含该键值的数据行。数据行不按基于非聚集键的次序存储。如果一个表只有非聚集索引,它的数据行将按无序的堆集方式存储,非聚集索引可以建多个。 唯一索引 唯一索引可以确保索引列不包含重复的值。在多列唯一索引的情况下,该索引可以确保索引列中每个值组合都是唯一的。唯一索引既是索引也是约束。 复合索引 索引项是多个的就叫组合索引,也叫复合索引。复合索引使用时需要注意索引项的次序。 索引对性能的作用 使用索引的优点 1. 通过唯一性索引(unique)可确保数据的唯一性 2. 加快数据的检索速度 3. 加快表之间的连接 4. 减少分组和排序的时间 使用索引的原则 1. 在需要经常搜索的列上创建索引 2. 经常用于连接的列上创建索引 3. 经常需要根据范围进行搜索的列上创建索引 4. 经常需要排序的列上创建索引 5. 经常用于where子句的列上创建索引 不使用索引的原则 1. 查询很少使用和参考的列不建索引 2. 对只有少数值的列不建索引 3. 定义为text、image、bit的列不建索引 4. 当需要update性能远远高于select性能时不建或少建索引 常用命令 1. sp_helpindex : 报告表或视图上的索引信息 2. dbcc showcontig :显示指定表的数据和索引的碎片信息 3. dbcc dbreindex :重建指定数据库中一个或多个索引 4. dbcc indexdefrag :整理指定表或视图的聚集索引或辅助索引的碎片 创建索引 1. 定义索引时,可以指定每列的数据是按升序还是降序存储。如果不指定,则默认为升序 2. 为索引指定填充因子,可标识填充因子来指定每个索引页的填满程度。索引页上的空余空间量很重要,因为当索引页填满时,系统必须花时间拆分它以便为新行腾出空间。 优化索引 1. 重建索引(dbcc dbreindex) 2. 索引优化向导 3. 整理指定的表或视图的聚集索引和辅助索引碎片(dbcc indexefrag)
用户评论