索引有助于我们提高系统的性能,提升查询效率,但是如果索引设计的不够合理,可能会适得其反,让我们的系统更加缓慢,查询效率下降,所以本次介绍一下索引的设计原则。
数据表的选择:
什么样的表适合建立索引呢,注意如果表很小数据不多,那么索引慎用,因为查询优化器在遍历用于搜索数据的索引时,花费的时间可能比执行简单的表扫描还长。 因此,小表的索引可能从来不用,但仍必须在表中的数据更改时进行维护。
操作对于索引的影响:
索引会影响 INSERT、UPDATE、DELETE 和 MERGE 语句的性能,因为当表中的数据更改时,所有索引都须进行适当的调整,所以在新建索引时应该尽量避免会做大量数据更新操作的列,而要选择时常需要查询的列来作为索引列,或者是两个表的关联字段和查询条件字段等作为索引列。
字段长度的选择:
索引列要选择较短的列,不能将 ntext、text、image、varchar(max)、nvarchar(max) 和 varbinary(max) 数据类型的列指定为索引键列。
聚集索引和非聚集索引的适用场景:
动作描述 |
使用聚集索引 |
使用非聚集索引 |
列经常被分组排序 |
应 |
应 |
返回某范围内的数据 |
应 |
不应 |
一个或极少不同值 |
不应 |
不应 |
小数目的不同值 |
应 |
不应 |
大数目的不同值 |
不应 |
应 |
频繁更新的列 |
不应 |
应 |
外键列 |
应 |
应 |
主键列 |
应 |
应 |
频繁修改索引列 |
不应 |
应 |
以上是索引设计的一些知识点,欢迎指正。