SQLSERVER 创建索引 修改索引 删除索引

因为要准备面试了,所以准备了一下,发现有些不熟练了,而且一些操作都需要上网进行 百度

下面是总结

检查表的索引信息

EXEC Sp_helpindex jerry_boys

创建索引

create unique/CLUSTERED/nonCLUSTERED    index pkindex on jerry_boys(name)

删除 索引

 drop index pkindex  on   jerry_boys
 drop index jerry_boys.pkindex  

修改索引

exec sp_rename 'jerry_boys.pkindex','jerry_boys.pkindex2'

创建主键索引

alter table jerry_boys  add constraint pkindex primary key(name)

删除主键索引

alter table jerry_boys drop constraint   pkindex

如果主键索引没有指定 CONSTRAINT 约束名

alter table jerry_boys  add   primary key(name)

那么删除的话,有两种方式

第一种   EXEC Sp_helpindex jerry_boys    获得 index_name 然后执行下一步

第二种 

SELECT    NAME FROM SYS.OBJECTS WITH(NOLOCK)
WHERE 
TYPE_DESC ='PRIMARY_KEY_CONSTRAINT' AND 
PARENT_OBJECT_ID = (SELECT OBJECT_ID 
FROM SYS.OBJECTS WITH(NOLOCK) 
WHERE NAME = 'jerry_boys' )

获得name ,再执行下一步

alter table jerry_boys drop  constraint PK__jerry_boys__0425A276

建立索引的原则:

1) 定义主键的数据列一定要建立索引。

2) 定义有外键的数据列一定要建立索引。

3) 对于经常查询的数据列最好建立索引。

4) 对于需要在指定范围内的快速或频繁查询的数据列;

5) 经常用在WHERE子句中的数据列。

6) 经常出现在关键字order by、group by、distinct后面的字段,建立索引。如果建立的是复合索引,索引的字段顺序要和这些关键字后面的字段顺序一致,否则索引不会被使用。

7) 对于那些查询中很少涉及的列,重复值比较多的列不要建立索引。

8) 对于定义为text、image和bit的数据类型的列不要建立索引。

9) 对于经常存取的列避免建立索引 

 

 

外键要记得加索引,不然会导致死锁问题

以下是抄来的说明

 

只有当唯一键或主键不被更新或删除的情况下,才不需要为外键创建索引。为子表外键创建索引可以有两个好处: 
  (1) 避免子表上有表锁,取而代之的是,数据库会获取索引上的行锁。 
  (2) 避免子表上的全表扫描。假设删除departments主表id=10的记录,如果employees子表的department_id外键没有索引,那么就会全表扫描employees子表,以确认是否存在department id=10的记录。
  
  当满足以下两个条件时,会获取子表的表锁: 
  (1) 子表外键不存在索引。 
  (2) 修改主表的主键(例如,删除一行记录或者修改主键值)或者合并主表的多行记录。向主表插入记录不会获取子表的表锁。 
  只有当主键值修改完成,子表的表锁才会被放开。
 

 

 

 

 

 

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值