索引
索引是以表列为基础的数据库对象,它保存表中排序的索引列,并记录索引列在数据表中的位置,实现表中数据的逻辑排序。这篇讲索引的作用、类型、建立原则、创建与维护。
索引的作用
索引的主要目的是提高 SQL Server 系统性能,加快数据查询速度、减少系统响应时间。
索引类型:
- 聚集索引(Clustered):决定数据的物理存储顺序,一个表只能有一个。
- 非聚集索引(Nonclustered):独立于数据的存储顺序,一个表可有多个。
- 唯一索引(Unique):保证索引列值唯一。
建立索引的原则
适合建立索引的列:
- 定义主键的数据列一定要建立索引。
- 定义外键的数据列一定要建立索引。
- 经常查询的数据列最好建立索引。
- 需要在指定范围内快速或频繁查询的数据列。
- 经常用在
WHERE子句中的数据列。
不适合建立索引的列:
- 查询中很少涉及的列、重复值较多的列。
- 定义为 text、image 和 bit 数据类型的列。
创建索引
索引的两种创建途径:
- 在创建主键、外键、唯一约束时自动创建。
- 手工创建(图形化或命令行)。
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此外,还可使用数据库引擎优化向导进行优化。
最后更新于