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'
记一记流水账