设计非聚集索引时需要注意数据库的特征:
更新要求较低但包含大量数据的数据库或表可以从许多非聚集索引中获益从而改善查询性能。
决策支持系统应用程序和主要包含只读数据的数据库可以从许多非聚集索引中获益。查询优化器具有更多可供选择的索引用来确定最快的访问方法,并且数据库的低更新特征意味着索引维护不会降低性能。
联机事务处理应用程序和包含大量更新表的数据库应避免使用过多的索引。此外,索引应该是窄的,即列越少越好。
一个表如果建有大量索引会影响 INSERT、UPDATE 和 DELETE 语句的性能,因为所有索引都必须随表中数据的更改进行相应的调整。
唯一索引
唯一索引确保Oracle数据库索引键不包含重复的值,因此,表或视图中的每一行在某种程度上是唯一的。
聚集索引和非聚集索引都可以是唯一索引。
包含性列索引
一种非聚集索引,它扩展后不仅包含键列,还包含非键列。
索引涵盖
指查询中的SELECT与WHERE子句的所用列同时也属于非聚集索引的情况。这样就可以更快检索数据,因为所有信息都可以直接来自于索引页,从而SQL Server可以避免访问数据页。加上独立的索引文件组,可以用最快速度访问数据。
请看如下表示例:
A.创建简单非聚集索引 以下示例为 Purchasing.ProductVendor 表的 VendorID 列创建非聚集索引。
1.USE AdventureWorks; 2.GO 3.CREATE INDEX IX_ProductVendor_VendorID 4.ON Purchasing.ProductVendor (VendorID); 5.GO |
B. 创建简单非聚集组合Oracle数据库索引
以下示例为 Sales.SalesPerson 表的 SalesQuota 和 SalesYTD 列创建非聚集组合索引。
1.CREATE NONCLUSTERED INDEX IX_SalesPerson_SalesQuota_SalesYTD 2.ON Sales.SalesPerson (SalesQuota, SalesYTD); 3.GO |
C. 创建唯一非聚集索引
以下示例为 Production.UnitMeasure 表的 Name 列创建唯一的非聚集索引。该索引将强制插入 Name 列中的数据具有唯一性。
1.USE AdventureWorks; 2.GO 3.CREATE UNIQUE INDEX AK_UnitMeasure_Name 4.ON Production.UnitMeasure(Name); 5.GO |
无论何时对基础数据执行插入、更新或删除操作,SQL Server 2005 数据库引擎都会自动维护索引。随着时间的推移,这些修改可能会导致索引中的信息分散在数据库中(含有碎片)。当索引包含的页中的逻辑排序(基于键值)与数 据文件中的物理排序不匹配时,就存在碎片。