索引是与表或视图关联的磁盘上结构,它由一个(一些字段)构成,可以加快从表或视图中检索行的速度。
索引的主要分类:
1、聚集索引
包含聚集索引的表的存储顺序按聚集索引列的顺序排列。
每个表只能有一个聚集索引。
检索效率比普通索引高,但对数据新增/修改/删除的影响比较大。
a. 聚集索引建立在您最频繁使用的、用以缩小查询范围的字段上;
b.您最频繁使用的、需要排序的字段上。
创建聚集索引语法:create NONCLUSTERED INDEX idximpID ON EMP(empID)
2、非聚集索引
通常,设计非聚集索引是为改善经常使用的、没有建立聚集索引的查询的性能。对于使用 JOIN 或 GROUP BY 子句建立非聚集索引。
数据并不按顺序排列。
不一定是唯一索引。
3、唯一索引
唯一索引确保索引键不包含重复的值,因此,表或视图中的每一行在某种程度上是唯一的。
使用索引的好处:设计良好的索引可以减少磁盘 I/O 操作,并且消耗的系统资源也较少,从而可以提高查询性能。对于包含 SELECT、UPDATE、DELETE 或
台MERGE 语句的各种查询,索引会很有用。
索引的缺点:建立索引需要占用磁盘空间,尤其是聚集索引占用更大的空间。索引的维护需要占用资源,影响性能。
对于经常修改的列不适宜建立索引,对于有很多重复值的列且经常分组或进行连接操作及经常排序的列应该建立索引,建立索引列不宜过复杂(少列,列值简单)。
对小表进行索引可能不会产生优化效果,因为查询优化器在遍历用于搜索数据的索引时,花费的时间可能比执行简单的表扫描还长。因此,小表的索引可能从来不用,但仍必须在表中的数据更改时进行维护。
将非聚集索引和表数据存放在不同的磁盘文件,这样可以同时读取多个磁盘,提高性能。
不能将ntext、text、image、varchar(max)、nvarchar(max) 和 varbinary(max)数据类型的列指定为索引键列。
聚集索引与非聚集索引使用问题:
动作描述 |
使用聚集索引 |
使用非聚集索引 |
列经常被分组排序 |
应 |
应 |
返回某范围内的数据 |
应 |
不应 |
一个或极少不同值 |
不应 |
不应 |
小数目的不同值 |
应 |
不应 |
大数目的不同值 |
不应 |
应 |
频繁更新的列 |
不应 |
应 |
外键列 |
应 |
应 |
主键列 |
应 |
应 |
频繁修改索引列 |
不应 |
应 |