第七章 索引
第四节 索引的属性
索引有两个特征,即唯一性索引和复合索引。
7.4.1 唯一性索引
唯一性索引保证在索引列中的全部数据是唯一的,不会包含重复数据。如果表中已经有一个主键约束或者唯一性键约束,那么当创建表或者修改表时,SQL Server自动创建一个唯一性索引。不过千万不要将创建一个唯一性索引当成保证数据唯一性的方法,而应该创建主键约束或者唯一性键约束。当创建唯一性索引时,应认真考虑以下规则。
(1)当在表中创建主键约束或者唯一性键约束时,SQL Server自动创建一个唯一性索引。
(2)如果表中已经包含有数据,那么当创建索引时,SQL Server检查表中已有数据的冗余性。
(3)每当使用插入语句插入数据或者使用修改语句修改数据时,SQL Server检查数据的冗余性。如果有冗余值,那么SQL Server取消该语句的执行,并且返回一个错误消息。
(4)确保表中的每一行数据都有一个唯一值,这样可以确保每一个实体都可以唯一确认。
(5)只能在可以保证实体完整性的列上创建唯一性索引,例如,不能在人事表中的姓名列上创建唯一性索引,因为人可以有相同的姓名。
7.4.2 复合索引
复合索引就是一个索引创建在两个列或者多个列上。在搜索时,当两个或者多个列作为一个关键值时,最好在这些列上创建复合索引。
小天:哟,这个和前面讲主键的时候讲到的联合主键有异曲同工之处啊。创建这个有些什么规则呢?
当创建复合索引时,应该考虑以下规则。
(1)最多可以把16个列合并成一个单独的复合索引,构成复合索引的列的总长度不能超过900字节,也就是说复合列的长度不能太长。
(2)所有的列必须来自同一个表中,不能跨表建立复合列。
(3)列的排列顺序是非常重要的,因此要认真排列列的顺序。原则上,应该首先定义最唯一的列。例如,在(列1,列2)上的索引与在(列2,列1)上的索引是不相同的,因为两个索引列的顺序不同。
(4)为了使查询优化器使用复合索引,查询语句中的WHERE子句必须参考复合索引中的第一个列。
(5)当表中有多个关键列时,复合索引是非常有用的。
(6)使用复合索引可以提高查询性能,减少在一个表中所创建的索引数量。
以前还看到有面试题说,索引根据索引键的组成可以分为三种,前面讲过的唯一和组合两种之外还有一种叫覆盖索引,这种就是说索引中已经包含了查询需要的全部信息。就像你去查字典找一个字,结果在索引中你就看到全部信息了。另外在SQL Server中,还提供了索引视图、全文索引和XML索引等表现形式。