- 1、本文档共19页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第6章 索引的创建与使用
SQL Server2005 SQL Server2005 * * 第5章 索引的创建与使用 * * 第5章 索引的创建与使用 索引概述 1 创建索引 2 管理索引 3 4 * * 5.1 索引概述 在数据库中包含了一个用于对表中的记录按需排序,从而可以优化查询的特殊对象,它就是索引。索引是一个与表或视图相关联的磁盘结构,可以加快从表或视图中检索行的速度。 索引和我们通常见到的图书目录的用途类似。 数据库中的索引是由表中的一列或多列字段值以及相应的指向表中物理标识这些值的数据页的逻辑指针构成的。 * * 5.1.1 为什么要创建索引 使用索引的好处: 帮助用户提高查询速度 保证数据记录的唯一性 加速表与表之间的连接 表中如果使用ORDER BY和GROUP BY命令进行数据检索时,可以明显地降低查询中分组和排序的时间 * * 建立索引参照以下原则: 在经常检索的列上创建索引(如经常在where子句中出现得列)。 在表的主键、外键上创建索引。 在经常用于表间连接的字段上建立索引。 一般而言,如下情况的列不考虑在其上创建索引: 在查询中几乎不涉及的列。 很少有唯一值的列(即包含太多重复值得列,如性别字段)。 数据类型为text、ntext或image的列。 只有较少行数的表没有必要创建索引。 当写的性能比查询更重要时,应少建或不建索引。 * * 5.1.2 索引的分类 SQL Server 2005 中常用的索引类型 : 聚集索引 非聚集索引 唯一索引 复合索引 * * 聚集索引:将表中的记录在物理数据页中的位置按索引字段值重新排序,再将重排后的结果写回到磁盘上。一个表只能创建一个聚集索引 。 下列情况时可以考虑创建聚集索引: 唯一或包含许多不重复的值。 需要按顺序被访问。 需要保证列在表中的唯一性。 经常用于对表中检索到的数据进行排序。 * * 非聚集索引 :非聚集索引与表中数据行的物理存储结构无关,因此在创建非聚集索引时不会改变数据表中记录的物理存储顺序。每个表的非聚集索引最多为249个。 下列情况时可以考虑创建非聚集索引: 使用 JOIN 或 GROUP BY 子句。 应为连接和分组操作中所涉及的列创建多个非聚集索引。 不返回大型结果集的查询。 经常包含在查询中的搜索条件的列。 * * 唯一索引:确保索引键不包含重复的值。聚集索引和非聚集索引都可以是唯一索引。可以创建基于单个字段的唯一索引,也可以对多个字段创建唯一索引。此时要求多个字段的组合取值不能重复,但对其中某个单独字段的取值可以重复。 建立唯一索引的字段最好不允许为空(NOT NULL) * * 复合索引:在对数据表创建索引时,有时创建基于单个字段的索引不能满足查询要求,这时需要对表创建多个字段的索引,这样的索引称为复合索引。在SQL SERVER系统中一个复合索引中包含的字段最多是16个,并且要求这些字段都属于一个表。 * * 5.2 创建索引 创建索引可以包括以下两种方式: 使用CREATE TABLE 或ALTER TABLE 命令对列定义PRIMARY KEY 或 UNIQUE 约束时系统自动创建索引。 使用 CREATE INDEX 语句或 SQL Server Management Studio 对象资源管理器创建索引。 * * 5.2.1 使用SQL Server Management Studio创建索引 第一步:新建索引 第二步:设置索引信息 * * 5.2.2 使用Transact-SQL语句创建索引 使用Transact-SQL语句创建索引的命令是CREATE INDEX,其语法格式如下: CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name ON { table | view } ( column [ ASC | DESC ] [ ...n ] ) [ WITH ( relational_index_option [ ,...n ] ) ] [ON { partition_schema_name ( column_name ) | filegroup_name | default ???} ?] relational_index_option ::= { ?PAD_INDEX = { ON | OFF} ?| FILLFACTOR = fillfactor | DROP_EXISTING = { ON |OFF} } * * 例5.1 为sales数据库中的Product表创建一个唯一聚集索引,依据字段ProductID进行排序。 USE sales GO CREATE UNIQUE CLU
文档评论(0)