因为要准备面试了,所以准备了一下,发现有些不熟练了,而且一些操作都需要上网进行 百度
下面是总结
检查表的索引信息
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) 修改主表的主键(例如,删除一行记录或者修改主键值)或者合并主表的多行记录。向主表插入记录不会获取子表的表锁。
只有当主键值修改完成,子表的表锁才会被放开。