跳至内容

索引

索引是以表列为基础的数据库对象,它保存表中排序的索引列,并记录索引列在数据表中的位置,实现表中数据的逻辑排序。这篇讲索引的作用、类型、建立原则、创建与维护。

索引的作用

索引的主要目的是提高 SQL Server 系统性能,加快数据查询速度、减少系统响应时间

索引类型:

  • 聚集索引(Clustered):决定数据的物理存储顺序,一个表只能有一个。
  • 非聚集索引(Nonclustered):独立于数据的存储顺序,一个表可有多个。
  • 唯一索引(Unique):保证索引列值唯一。

建立索引的原则

适合建立索引的列:

  • 定义主键的数据列一定要建立索引。
  • 定义外键的数据列一定要建立索引。
  • 经常查询的数据列最好建立索引。
  • 需要在指定范围内快速或频繁查询的数据列。
  • 经常用在 WHERE 子句中的数据列。

不适合建立索引的列:

  • 查询中很少涉及的列、重复值较多的列。
  • 定义为 text、image 和 bit 数据类型的列。

创建索引

索引的两种创建途径:

  1. 在创建主键、外键、唯一约束时自动创建
  2. 手工创建(图形化或命令行)。
CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED]
INDEX 索引名 ON 表名 (列名 [ASC | DESC], [列名])
  • UNIQUE:唯一索引
  • CLUSTERED:聚集索引
  • NONCLUSTERED:非聚集索引

查看、重命名与删除

-- 查看索引
EXEC sp_helpindex 表名

-- 重命名索引
EXEC sp_rename '表名.旧索引名', '新索引名'

-- 删除索引
DROP INDEX 表名.索引名
不能用 DROP INDEX 删除由 PRIMARY KEY 或 UNIQUE 约束创建的索引,要先删除对应约束。删除聚集索引时,表中所有非聚集索引将被重建。

索引分析与维护

日常维护索引可以从以下方面入手:查看执行计划、查看磁盘 I/O 信息、定期更新索引页统计信息、查看索引页碎片、整理索引页信息。

常用命令:

-- 更新索引统计信息
UPDATE STATISTICS 表名

-- 扫描表、查看碎片
DBCC SHOWCONTIG

-- 碎片整理
DBCC INDEXDEFRAG

此外,还可使用数据库引擎优化向导进行优化。

最后更新于