仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 984|回复: 8
打印 上一主题 下一主题

[学习教程] Sql Server中ALTER INDEX的经常使用用法剖析

[复制链接]
活着的死人 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 14:07:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
在JOIN操作中(需要从多个数据表提取数据时),MySQL只有在主键和外键的数据类型相同时才能使用索引。alterindex在MSDN中是如许注释的:
经由过程禁用、从头天生或从头构造索引,或经由过程设置索引的相干选项,修正现有的表索引或视图索引(干系索引或XML索引)

它的功效良多,出格是对索引的操纵。惋惜本人对它的深切用法也不是很分明,仅讲讲我本人经常使用它来完成的几个功效:
1,重修索引
2,重组索引
3,禁用索引
4,启用索引
5,禁用束缚
6,启用束缚

上面我们来逐一解说下面几个功效的完成
1、重修索引
跟着数据库的数据量的增加,数据库在查找数据的时分会愈来愈慢,就比如一本书,当书愈来愈厚,我们要在这本书中找到想要的器材就会愈来愈慢,这时候候,就会在书的后面增添目次来让我们疾速查找要想要的信息。数据库也是一样,当个中的数据愈来愈的时分,我们也应当为数据库创建一个目次,以便利数据库疾速的找到我们要查询的数据。这个目次,在数据库中就称之为索引。

当索引创建后,在我们对数据库举行增编削的过程当中,会参生必定量的索引碎片,这些碎片会影响索引的查找速率,以是当碎片到达必定程序的时分,我们就必要对索引举行收拾了。

使用alterindex重修索引的sql语句:
ALTERINDEX索引名ON表名REBUILD

假如我们要重修某表的一切索引名,能够将下面sql语句中的索引名改成关头字ALL,即sql语句以下:
ALTERINDEXallON表名REBUILD

固然,重修索引的办法还能够在microsoftsqlservermanagementstudio当选择:要重修的索引地点的表->"索引",选择要检察的索引,选择"从头天生"大概"从头构造"来重修索引。

二,重组索引
必要重组索引的缘故原由与重修索引的缘故原由一样,都是为了让我们的索引更无效。
使用alterindex重组索引的sql语句以下:
ALTERINDEX索引名ON表名REORGANIZE

实在也就是关头字REBUILD与REORGANIZE的区分。
假如我们要重组某表的一切索引名,能够将下面sql语句中的索引名改成关头字ALL,即sql语句以下:
ALTERINDEXallON表名REORGANIZE

既然重组索引与重修索引的终极目标都是一样,那末我们甚么时分必要重修索引,甚么时分必要重组索引呢?假如碎片比小于30%,我们能够从头构造索引,假如碎片比年夜于即是30%,我们能够选择从头天生索引。
检察索引碎片的办法能够参考以下文章:
使用sys.dm_db_index_physical_stats检察索引碎片等数据

三,禁用索引
禁用索引能够用以下sql语句来完成:
ALTERINDEX索引名ON表名DISABLE

四,启用索引
假如索引被禁用,则我们能够经由过程重修索引来从头启用它。

五,禁用束缚
禁用束缚的sql语句以下:
ALTERINDEX主键名ON表名DISABLE

该办法是经由过程禁用主键来禁用该主键所对应的一切外键,在外键被禁用时sqlserver会显现告诫动静,好比我在禁用一个建有外键的主键时,sqlserver提醒了以下动静:
告诫:因为禁用了索引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语句以下:
ALTERINDEX主键名ON表名REBUILD


间接启用或禁用外键,能够参考本站以下文章:
SQLServer一时禁用和启用一切外键束缚

以上是自己对alterindex语法的了解,因本人对alterindex用法懂得的无限,本章的内容也显现的单调,短少示例,敬请了解,人人假如有增补,请主动参进批评。两个到底是哪一个给出了MySQL这个名字至今依然是个迷,包括开发者在内也不知道。
若天明 该用户已被删除
沙发
发表于 2015-1-18 12:08:35 | 只看该作者
如果处理少量数据,比如几百条记录的数据,我不知道这两种情况哪个效率更高,如果处理大量数据呢?比如有表中有20万条记录.
爱飞 该用户已被删除
板凳
发表于 2015-1-25 23:34:17 | 只看该作者
如果我们从集合论(关系代数)的角度来看,一张数据库的表就是一组数据元的关系,而每个SQL语句会改变一种或数种关系,从而产生出新的数据元的关系(即产生新的表)。
若相依 该用户已被删除
地板
发表于 2015-2-4 13:55:18 | 只看该作者
数据库物理框架没有变动undo和redo都放在数据库得transaction中,个人感觉是个败笔。如果说我们在设计数据库的时候考虑分多个数据库,可能能在一定程度上避免I/O效率问题。
兰色精灵 该用户已被删除
5#
发表于 2015-2-10 01:48:45 | 只看该作者
SP4是一个累积性的ServicePack,包含自以前的ServicePack发布以来所有的修补程序(包括MS03-031安全公告)。
活着的死人 该用户已被删除
6#
 楼主| 发表于 2015-2-28 16:33:40 | 只看该作者
而写到本地,我又考虑到效率问题.大家来讨论讨论吧,分数不打紧,就给10分,十全十美,没啥对错,各抒己见,但是要有说服力的哦~
小女巫 该用户已被删除
7#
发表于 2015-3-10 04:10:40 | 只看该作者
这是一个不错的新特性。虽然索引的附加字段没有索引键值效率高,但是相对映射到数据表中效率还是提高了很多。我做过试验,在我的实验环境中会比映射到表中提高30%左右的效率。
飘飘悠悠 该用户已被删除
8#
发表于 2015-3-17 05:07:51 | 只看该作者
但换公司用MSSQL2K感觉自己好像根本就不了解MSSQL。什么DTS触发器以前根本没用过。
乐观 该用户已被删除
9#
发表于 2015-3-23 21:26:20 | 只看该作者
我个人认为就是孜孜不懈的学习
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-4 20:59

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表