代码改变世界

索引 - 在文件组上放置索引

2013-02-19 13:37  BIWORK  阅读(594)  评论(0编辑  收藏  举报

开发索引设计策略时, 应该考虑在与数据库相关联的文件组上放置索引, 仔细选择文件组或分区方案可以改进查询性能. 

默认情况下, 索引存储在基表所在的文件组上, 该索引即在该基表上创建, 非分区聚集索引和基表始终在同一个文件组中. 但是,您可以执行以下操作:

  • 为文件组而不是为基表的文件组创建非聚集索引.

  • 对要涵盖多个文件组的聚集和非聚集索引进行分区. 

  • 通过删除聚集索引并在 DROP INDEX 语句的 MOVE TO 子句中指定新的文件组或分区方案, 或者在 CREATE INDEX 语句中使用 DROP_EXISTING 子句, 将表从一个文件组移至另一个文件组. 

通过对其他文件组创建非聚集索引, 可以在文件组通过自带的控制器使用不同的物理驱动器时实现性能提升. 这样一来, 数据和索引信息即可由多个磁头并行读取. 例如, 如果文件组 f1 的 Table_A 和文件组 f2 的 Index_A 都由同一个查询使用, 就可无争夺地充分使用这两个文件组, 因此可以实现性能提升. 但是, 如果 Table_A 由查询扫描而没有引用 Index_A, 则仅使用文件组 f1, 这不会引起性能提升.

由于无法预测将要发生的访问类型以及访问时间, 因此更好的办法可能是展开所有文件组中的表和索引, 这将保证能够访问所有磁盘, 因为所有数据和索引在所有磁盘上均匀展开, 不受访问数据的方式的限制, 这对系统管理员来说也是更简单的方法. 


在多个文件组中分区

还可以考虑在多个文件组中对聚集和非聚集索引分区. 根据分区函数, 对已分区的索引进行水平分区或按行分区. 分区函数定义如何根据某些列(称为分区依据列)的值将每一行映射到一组分区, 分区方案将分区映射指定给一组文件组. 

对索引进行分区有以下优点:

  • 提供使大型索引更易管理的可伸缩系统. 例如, OLTP 系统可以实现处理大型索引的可识别分区的应用程序.

  • 使查询运行得更快,更有效. 当查询访问索引的几个分区时, 查询优化器同时可以处理各个分区, 但不包括不受该查询影响的分区.

有关详细信息, 请参阅 已分区表和已分区索引 

对特定文件组创建新索引

CREATE INDEX

将现有索引或表移动到其他文件组中

如何将现有索引移动到其他文件组 (SQL Server Management Studio)

DROP INDEX MOVE TO

CREATE INDEX WITH DROP_EXISTING