第8章 索 引(Index) 8.1 索引概述 8.2 创建索引 8.3 修改和删除索引
能力目标 理解索引的定义和分类; 掌握创建和维护索引的各种方法; 掌握索引的用法。
态度目标 团队精神; 态度积极; 任务按时完成; 出勤。
重点难点 重点: 索引的用法。 难点:
8.1 索引概述 1. 索引(Index) 索引(Index)是数据库中的一个列表,该列表 包含了某个数据表中的一列或几列值的集合,以及 8.1 索引概述 1. 索引(Index) 索引(Index)是数据库中的一个列表,该列表 包含了某个数据表中的一列或几列值的集合,以及 这些值的记录在数据表中存储位置的物理地址。
8.1 索引概述 2. 索引分类 聚集索引( Clustered Index ):聚集索引重新 8.1 索引概述 2. 索引分类 聚集索引( Clustered Index ):聚集索引重新 组织表中的数据以按指定的一个或多个列的值排序, 在该类型的索引中,记录行的物理存储顺序与索引 顺序一致,即索引的顺序决定了表中行的顺序。 非聚集索引(Nonclustered Index):非聚集索 引不重新组织表中的数据,索引仅仅记录指向表中 行的位置的指针,它的叶节点中存储了组成非聚集 索引的列的值和行定位指针,通过这些有序的指针 可以快速定位行记录。
8.2 创建索引 1. 索引的自动创建 在创建表的过程中,在创建主键(Primary Key) 或唯一性约束时, 系统会自动创建 8.2 创建索引 1. 索引的自动创建 在创建表的过程中,在创建主键(Primary Key) 或唯一性约束时, 系统会自动创建 一个唯一索引, 该索引可以是聚 集索引或非聚集 索引。
8.2 创建索引 2. 使用“SQL Server Management Studio” 管理工具 创建索引
8.2 创建索引 3. 使用Transac-SQL语句创建索引 8.2 创建索引 3. 使用Transac-SQL语句创建索引 CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name ON <object> ( column [ ASC | DESC ] [ ,...n ] ) [ INCLUDE ( column_name [ ,...n ] ) ] [ WITH ( <relational_index_option> [ ,...n ] ) ] [ ON { partition_scheme_name ( column_name ) | filegroup_name | default } ][ ; ]
8.2 创建索引 3. 使用Transac-SQL语句创建索引 【案例8.1】在employees表上以hiredate字段创建索 8.2 创建索引 3. 使用Transac-SQL语句创建索引 【案例8.1】在employees表上以hiredate字段创建索 引hiredate_ndx。 CREATE INDEX hiredate ON employees (hiredate) 【案例8.2】在 sales 表上以cust_id列创建索引,并 且强制唯一性。 CREATE UNIQUE NONCLUSTERED INDEX sale_cust_ndx ON sales (cust_id)
8.2 创建索引 3. 使用Transac-SQL语句创建索引 使用IGNORE_DUP_KEY参数,在products表上 8.2 创建索引 3. 使用Transac-SQL语句创建索引 【案例8.3】 使用IGNORE_DUP_KEY参数,在products表上 以ProType列创建唯一索引,如果输入了重复的键, 将忽略该INSERT或UPDATE语句。 CREATE UNIQUE NONCLUSTERED INDEX protype_ndx ON products(ProType) WITH IGNORE_DUP_KEY
8.2 创建索引 4. 创建索引视图 【案例8.4】 根据customers和sales创建视图ust_order_view,视 8.2 创建索引 4. 创建索引视图 【案例8.4】 根据customers和sales创建视图ust_order_view,视 图中包含order_id、Pro_id、customer、Quantity列。再 使用Transact-SQL语句根据order_id列创建索引视图。 USE eTradeInfo GO CREATE VIEW cust_order_view WITH SCHEMABINDING AS SELECT S.order_id, Pro_id, customer, Quantity FROM customers C, Sales S, Sale_detail D WHERE C.cust_id = S.cust_id AND S.Order_id = D.Order_id 在视图cust_order_view上创建索引: CREATE UNIQUE CLUSTERED INDEX cust_order_view_ndx ON cust_order_view(order_id) 如果在查询中 频繁使用视图,可 以通过对视图创建 唯一聚集索引来提 高查询性能。
8.3 修改和删除索引 1. 使用“SQL Server Management Studio”管理工具 修改索引
8.3 修改和删除索引 2. 使用Transact-SQL语句删除索引 使用Transact-SQL语言中的DROP INDEX语句 8.3 修改和删除索引 2. 使用Transact-SQL语句删除索引 使用Transact-SQL语言中的DROP INDEX语句 删除索引的常用语法格式如下: 参数:index:是要除出的索引名称。 object:table | view:是索引列所在架构上的 表或索引视图。 n:是表示可以指定多个索引的占位符。 【案例8.5】删除eTradeInfo数据库sales表上的索引 sale_cust_ndx。 DROP INDEX { < index_name ON <object> [ ,...n ] } DROP INDEX dbo.sales.sale_cust_ndx
Management Studio ” 管理窗口中,完成索引创建。 1. 在表employees上创建一个索引,使用字段emp_id和 案例分析 使用案例数据库 eTradeInfo ,在 “ SQL Server Management Studio ” 管理窗口中,完成索引创建。 1. 在表employees上创建一个索引,使用字段emp_id和 hiredate作为索引字段。 2. 使用 Transact-SQL 语句,在表Sales上创建一个索引, 使用字段 cust_id、emp_id 和orderdate作为索引字段,并在 “新建查询”窗口中完成调试。 3. 在进货合同表(BuyOrder)上,按照签订合同日期 创建一个非聚集索引,填充因子为10。 4. 在入库单表(EnterStock)上,以入库人和热库时间 创建一个非聚集索引。 5. 在销售和同(Sales)上,以销售部门编号、签订合 同人编号创建一个非聚集索引。
1. 用“SQL Server Management Studio”和T-SQL 语句创建索引,并在“SQL编辑器”窗口中调试; 案例分析 要求: 1. 用“SQL Server Management Studio”和T-SQL 语句创建索引,并在“SQL编辑器”窗口中调试; 2. 正确区分索引的种类; 3. 索引修改方法。 问题: 1. 通过创建表中的主键可以自动创建何种类型 的索引? 2. 一个表中聚簇索引可以唯一吗? 讨论: 为何在创建表时最好创建主键?
索引的概念、分类以及使用索引的一些原则。 使用“SQL Server Management Studio”管理工具和 本章小结 索引的概念、分类以及使用索引的一些原则。 使用“SQL Server Management Studio”管理工具和 Transact-SQL语法创建、修改和删除索引等。 在一个数据表上只能建立一个聚集索引,可以建 立最多249个非聚集索引。 聚集索引对表中的数据行完全重新排序,用聚 集索引查询数据记录比较快。 非聚集索引具有完全独立于数据行的结构,存储 了索引关键字的值和记录行定位器,它使用索引页的 存储结构,它比聚集索引需要较少的存储空间,其检 索效率较聚集索引低。