alter index在MSDN中是这样解释的:
通过禁用、重新生成或重新组织索引,或通过设置索引的相关选项,修改现有的表索引或视图索引(关系索引或 XML 索引)。
它的功能很多,特别是对索引的操作。可惜自己对它的深入用法也不是很清楚,仅讲讲我自己常用它来实现的几个功能:
1,重建索引
2,重组索引
3,禁用索引
4,启用索引
5,禁用约束
6,启用约束
下面我们来一一讲解上面几个功能的实现
一、重建索引随着数据库的数据量的增多,数据库在查找数据的时候会越来越慢,就好比一本书,当书越来越厚,我们要在这本书中找到想要的东西就会越来越慢,这时候,就会在书的前面增加目录来让我们快速查找要想要的信息。数据库也是一样,当其中的数据越来越的时候,我们也应该为数据库建立一个目录,以方便数据库快速的找到我们要查询的数据。这个目录,在数据库中就称之为索引。
当索引建立后,在我们对数据库进行增删改的过程中,会参生一定量的索引碎片,这些碎片会影响索引的查找速度,所以当碎片达到一定程序的时候,我们就需要对索引进行整理了。
利用alter index重建索引的sql语句:
ALTER INDEX 索引名 ON 表名 REBUILD
如果我们要重建某表的所有索引名,可以将上面sql语句中的'索引名'改为关键字'ALL',即sql语句如下:
ALTER INDEX all ON 表名 REBUILD
当然,重建索引的方法还可以在microsoft sql server management studio中选择:要重建的索引所在的表- >"索引",选择要查看的索引,选择"重新生成"或者"重新组织"来重建索引。
二,重组索引需要重组索引的原因与重建索引的原因一样,都是为了让我们的索引更有效。
利用alter index重组索引的sql语句如下:
ALTER INDEX 索引名 ON 表名 REORGANIZE
其实也就是关键字REBUILD与REORGANIZE的区别。
如果我们要重组某表的所有索引名,可以将上面sql语句中的'索引名'改为关键字'ALL',即sql语句如下:
ALTER INDEX all ON 表名 REORGANIZE
既然重组索引与重建索引的最终目的都是一样,那么我们什么时候需要重建索引,什么时候需要重组索引呢?如果碎片比小于30%,我们可以重新组织索引,如果碎片比大于等于30%,我们可以选择重新生成索引。
查看索引碎片的方法可以参考如下文章:
利用sys.dm_db_index_physical_stats查看索引碎片等数据三,禁用索引禁用索引可以用以下sql语句来实现:
ALTER INDEX '索引名' ON '表名' DISABLE
四,启用索引如果索引被禁用,则我们可以通过重建索引来重新启用它。
五,禁用约束禁用约束的sql语句如下:
ALTER INDEX '主键名' ON '表名' DISABLE
该方法是通过禁用主键来禁用该主键所对应的所有外键,在外键被禁用时sql server会显示警告消息,比如我在禁用一个建有外键的主键时,sql server提示了以下消息:
警告: 由于禁用了索引 'PK__Assets_BackUp__3AC8D058',导致引用表 'Assets_BackUp' 的表 'Assets_BackUp_HrGoods' 上的外键 'DF_Assets_HG_Assets_BU' 也被禁用。
警告: 由于禁用了索引 'PK__Assets_BackUp__3AC8D058',导致引用表 'Assets_BackUp' 的表 'Assets_BackUp_Assets' 上的外键 'FK_Assets_BA_Assets_BU' 也被禁用。
六,启用约束
主键一旦被禁用,那么它对应的外键也禁用了,那么要如何重新启用这些约束呢?我们只要重建主键即可,对应的外键约束也自动被启用了。
sql语句如下:
ALTER INDEX '主键名' ON 表名 REBUILD
直接启用或禁用外键,可以参考本站以下文章:
SQL Server 临时禁用和启用所有外键约束以上是本人对alter index语法的理解,因自己对alter index用法了解的有限,本章的内容也显示的单调,缺少示例,敬请理解,大家如果有补充,请积极参入评论。