索引

  • 创建表
-- 创建表
CREATE TABLE authors(
auth_id int IDENTITY(1,1) NOT NULL,
auth_name varchar(20) NOT NULL,
auth_gender tinyint NOT NULL,
auth_phone varchar(15) Null,
auth_note varchar(100) Null
);

创建索引

  • 【例1】在authors表中auth_phone列上创建一个名称为Idx_phone的唯一聚集索引,降序排列,填充因子为30%。
CREATE UNIQUE CLUSTERED INDEX Idx_phone
ON authors(auth_phone DESC)
WITH
FILLFACTOR = 30;
  • 【例2】在authors表中auth_name和auth_gender列上创建一个名称为Idx_nameAndgender的唯一非聚集组合索引,升序排列,填充因子为10%
CREATE UNIQUE NONCLUSTERED INDEX Idx_nameAndgender
ON authors(auth_name,auth_gender)
WITH
FILLFACTOR = 10;

维护和管理索引

  • 显示索引信息

【例3】使用存储过程查看数据库中member表中定义的索引信息

-- 显示索引信息
GO
exec sp_helpindex 'authors';

执行结果如图:


图中显示了authors表中的索引信息:

  • index_name : 指定索引名称,这里创建了2个不同名称索引。

  • index_description : 包含索引描述信息,唯一性约束、聚集索引等。

  • index_keys : 包含了索引所在表中的列。

  • 查看索引统计信息

    【例4】使用DBCC SHOW_STATISTICS命令来查看authors表中Idx_phone索引的统计信息。

-- 查看索引统计信息
DBCC SHOW_STATISTICS ('newdb.dbo.authors',Idx_phone);

执行结果如图:



图中统计信息包含3个部分:

  • 统计标题信息:主要博爱阔表中的行数、统计抽样行数、索引列的平均长度等。

  • 统计密度信息:主要包括索引列前缀集选择性、平均长度等信息。

  • 统计直方图信息:即为宣誓直方图时的信息。

  • 重命名索引

    【例5】将authors表中的索引名称idx_nameAndgender更改为multi_index

--重命名索引
GO
exec sp_rename 'authors.idx_nameAndgender','multi_index','index';
  • 删除索引

    【例6】删除表authors中的索引multi_index,

--删除索引
GO
exec sp_helpindex 'authors'
DROP INDEX authors.multi_index
exec sp_helpindex 'authors'

问题:

  1. 索引对数据库性能如此重要,该如何使用它?

为数据选择索引是一项复杂任务。
如果索引列较少,则需要的磁盘空间和维护开销都少。
如果在一个大表上创建了多种组合索引,文件就会膨胀的很快。
而另一方面,索引较多则可覆盖更多查询。可能需要试验若干不同的设计,才能找到最有效的索引。
可以添加修改和删除索引而不影响数据库架构或应用程序设计。
因此,应该尝试多个不同的索引,从而建立最优的索引。

  1. 为什么要使用短索引?

对字符串类型的字段进行索引,如果可能应该指定一个前缀长度。
例如,如果有一个char(255)列,如果在前10个或30个字符内,多数值是唯一的,则不需要对整个列进行索引。
短索引不仅可以提高查询速度而且可以节省磁盘空间和减少I/O操作。

posted @   一纸年华  阅读(6)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示

目录导航

创建索引
维护和管理索引
问题: