索引的优点
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;
记一记流水账