SqlServer--索引相关操作

索引的优点

   1、通过创建索引,可以保证数据库中每一行数据的唯一性。

   2、可以大大加快查询数据的速度,这也是创建索引的最主要原因。

   3、实现数据的参照完整性,可以加速表之间的连接。

   4、在使用分组、排序的时候,可以减少查询中分组、排序的时间。

弊端

 1、创建索引和维护索引需耗费时间,随着数据量的增加维护索引的时间也会增加。

 2、索引跟table一样会占用一定的物理空间,若是在数据库中有大量的索引,索引文件可能比数据文件更快达到文件最大容量(尺寸)。

 3、当对表中的数据进行增、删、改这些操作时,索引也要动态地维护,这样就降低了数据的维护速度。

 

索引的分类

聚集索引、非聚集索引

 聚集索引

      按照table中的数据表中一定存储的顺序,基于table中的数据行。

特点

       1、一个table中只能有一个聚集索引。

       2、表中的物理顺序跟聚集索引的顺序是一样的,创建任何非聚集索引之前一定要先创建聚集索引,因为非聚集索引改变了table中行的物理顺序。

       3、关键值使用唯一性的UNIQUE关键字或者内部唯一标识符明确维护。一定要是惟一的标识符

       4、在创建索引的过程中,SQL Server临时使用当前数据库的磁盘空间,要保证磁盘由足够的空间。

 索引分为这几种

   索引视图、XML索引、唯一索引、组合索引、聚集索引、非聚集索引、筛选索引、空间索引、全文索引、包含列索引

   注 组合索引的条件字段最好不要超过4个,假设超过4个,就换成多个简单的组合索引

创建索引的原则

  建议不创索引

       数据量少的table不创,避免在多列创建索引,列中的相同值少的不创

建议创的

       数据量多,相同值少,在频繁进行组合、排序的列上建立组合索引(4个字段就不建组合索引)

       当数据为table中唯一性数据,引用唯一索引可以提高查询速度

 

UNIQUE  在表或视图中创建唯一性索引,唯一索引不允许两行具有相同的索引建值,视图的聚集索引必须为唯一。

CLUSTERED  为表或视图创建聚集索引,在创建聚集索引的时候同时会重新生成现有表中的所有非聚集索引。

NONCLUSTERED  创建非聚集索引,聚集索引按照table中字段的排序,快速准确的找到所需值。非聚集索引先找到一个大的区域,再缩小范围去找值。

index_name     指定索引的名称  在视图(表)中索引名称必须是唯一的

ON  指定索引所属的表或视图

Column   指定索引基于一列或多列。指定两个或多个列名。组合索引

ASC  DESC 索引进行排序

DROP_EXISTING  指定删除的索引并重新生成已命名的先前存在的聚集和非聚集索引。

 

 

创建一个Table叫 authors

create table authors

(

  auth_id  int  identity(1,1)not null,

  auth_name  varchar(20) not null,  

  auth_gender  tinyint  not null,

  auth_phone  varchar(20) null,

  auth_note  varchar(100) null

);

 

在authors表中的auth_phone列上,创建一个名称为IdX_phone的唯一索引,降序排序,填充因子为30%。

 

CREATE  UNIQUE  NONCLUSTERED  INDEX IdX_phone

ON authors(auth_phone DESC)

WITH

FILLFACTOR=30;

 

在authors表中的auth_phone列上,创建一个名称为IdX_nameAndgender的唯一非聚集组合索引,升序排序,填充因子为10%。

 

CREATE UNIQUE NONCLUSTERED INDEXC IdX_nameAndgender 

ON authors(auth_name,auth_gender)

WITH

FILLFACTOR=10;

 

 用存储过程看test中 ‘outhors’ 索引

go 
exec  sp_helpindex  'authors'   --查看authors
Index_description  :索引中的信息
Index_key              :索引中的列(表中)
Index_name           :索引名字

  

创建索引

创建一个名为autrh_phone的索引
  在auth_phone列上,创建一个名为Idx_SY的唯一聚集索引,降序排序,填充因子为30%.
create unique clustered Index Id_SY
on authous (auth_phone  DESC)
with
fillfactor=30;

 

在authors表中的anth_name和auth_gender列上,创建一个名称为Idx_nameAndgender的唯一非聚集组合索引,升序排序,填充因子为10%

CREATE UNIQUE NONCLUSTERED INDEX Idx nameAndgender
ON  authors(auth_name,auth_gender)
WITH
FILLFACTOR=10;

 

用存储过程看索引

用索引看表authours中的Idx_phone索引统计信息

dbcc  show_statistics (‘test.dbo.authour’,Idx_phone)

  

修改索引名

用系统中的存储过程

语法:
        sp_rename  'object_name' , ' new_name','object_type'
  object_name --当前索引名   new_name  新名字  object_type 对象类型

eg:修改authours表中的idx_nameAndgerder改为mnlti_index
        sp_rename ‘idx_nameAndgender’,‘mnlti_index’,‘database’

修改索引的类型  

    列 column     数据名修改时用 database

    用户定义索引  Index     重命名索引  object

    userdatatype  通过 create type 或 sp_addtype 天剑别名数据类型或clr用户定义类型

当前数据库名改变

sp_rename 'idx_nameAndgender','multi_index' ,'index';

删除索引

DROP INDEX 'index' on [ table | view ]

table|view 索引所在的表(视图)  index  删除指定索引名的索引

注:
      drop index 不能删含 create table 或 alter table 命令创建的主键或唯一索引

删除表authours 中索引 multi_index

exec  sp_helpindex 'authors'

drop index authors.multi_index
exec sp_helpindex 'authors'

  

  

 

  

 

 

 

记一记流水账

posted @ 2020-06-15 21:32  猎人7号  阅读(289)  评论(0编辑  收藏  举报