资源简介 (共43张PPT)第8章 索引与数据完整性本章主要介绍索引与数据完整性,包括索引的概念、索引的建立、索引的删除、索引的分析与维护、数据完整性及其实现机制。通过本章的学习,读者应掌握建立或者删除索引的方法,能够使用索引优化数据库查询;了解数据完整性。8.1 索引8.2 数据完整性8.1 索 引8.1.1 索引的概念数据库索引是对数据表中一个或多个列的值进行排序的结构,它是数据库中一个非常有用的对象,就像一本书的索引,索引提供了在表中快速查询特定行的能力。在表中索引的支持下,SQL Server查询优化器可以找出并使用正确的索引来优化对数据的访问。如果没有索引,查询优化器只有一个选择,那就是对表中的数据进行全部扫描以找出要找的数据行。8.1.2 索引的建立1.使用图形界面创建索引图8.1 选择新建索引图8.2 新建索引图8.3 选择列窗体图8.4 新建索引2.使用Transact-SQL语句创建索引语法如下CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_nameON { table | view } ( column [ ASC | DESC ] [ ,...n ] )[ WITH < index_option > [ ,...n] ][ ON filegroup ]< index_option > ::={ PAD_INDEX |FILLFACTOR = fillfactor |IGNORE_DUP_KEY |DROP_EXISTING |STATISTICS_NORECOMPUTE |SORT_IN_TEMPDB}8.1.3 索引的删除删除不再需要的索引,可以回收索引当前使用的磁盘空间,避免不必要的浪费。下面分别介绍使用SQL Server Management Studio和SQL语句删除索引的方法。1.使用图形界面删除索引图8.4 删除索引2.使用SQL语句删除索引使用Transact-SQL语句中的Drop Index命令可删除索引,其语法结构如下:DROP INDEX .8.1.4 索引的分析与维护1.索引的分析(1)使用SHOWPLAN语句显示查询语句的执行信息,包含查询过程中连接表时所采取的每个步骤以及选择哪个索引。语法:SET SHOWPLAN_ALL { ON | OFF }SET SHOWPLAN_TEXT { ON | OFF }(2)使用STATISTICS IO语句显示执行数据检索语句所花费的磁盘活动量信息,可以利用这些信息来确定是否重新设计索引。语法:SET STATISTICS IO {ON|OFF}2.索引的维护(1)使用DBCC SHOWCONTIG语句显示指定表的数据和索引的碎片信息。当对表进行大量的修改或添加数据后,应该执行此语句来查看有无碎片。语法:DBCC SHOWCONTIG [{ table_name | table_id | view_name |view_id }, index_name | index_id ] ) ](2)使用DBCC DBREINDEX语句重建指定数据库中表的一个或多个索引。语法:DBCC DBREINDEX( [ 'database.owner.table_name'[ , index_name[ , fillfactor ]]]) [ WITH NO_INFOMSGS ](3)使用DBCC INDEXDEFRAG语句整理指定的表或视图的聚集索引和辅助索引碎片。语法:DBCC INDEXDEFRAG( { database_name | database_id | 0 }, { table_name | table_id | 'view_name' | view_id }, { index_name | index_id }) [ WITH NO_INFOMSGS ]8.2 数据完整性在SQL Server 2016中,数据库主要用于存储数据及其相关的对象(表、视图及存储过程等),如何确保输入的数据符合规则,是保证数据库正常使用的前提条件。8.2.1 数据完整性概述数据完整性是SQL Server用于保证数据库中数据一致性的一种机制,防止非法数据存入数据库。数据完整性主要体现在以下几点。(1)数据类型准确无误。(2)数据取值符合规定的范围。(3)多个数据表之间的数据不存在冲突。1.实体完整性现实世界中,任何一个实体都有区别于其他实体的特征,即实体完整性。在SQL Server数据库中,实体完整性是指所有的记录都应该有一个唯一的标识,以确保数据表中数据的唯一性。如果将数据库中数据表的第一行看作一个实体,可以通过以下几项实现实体完整性。(1)唯一索引(Unique Index)。(2)主键(Primary Key)。(3)唯一码(Unique Key)。(4)标识列(Identity Column)。2.域完整性域是指数据表中的列(字段),域完整性就是指列的完整性。它要求数据表中指定列的数据具有正确的数据类型、格式和有效的数据范围。域完整性常见的实现机制包括以下几点。(1)默认值(Default)。(2)检查(Check)。(3)外键(Foreign Key)。(4)数据类型(Data Type)。(5)规则(Rule)。3.引用完整性引用完整性又称参照完整性,通过主键(Primary Key)约束和外键(FOREIGN KEY)约束来实现被参照表和参照表之间的数据一致性。引用完整性可以确保键值在所有表中保持一致,如果键值更改了,在整个数据库中,对该键值的所有引用要进行一致的更改。强制引用完整性时,SQL Server禁止用户进行下列操作。(1)当主表中没有关联的记录时,将记录添加到相关表中。(2)更改主表中的值并导致相关表中的记录孤立。(3)从主表中删除记录,但仍存在与该记录匹配的相关记录。4.用户定义完整性用户定义完整性是用户希望定义的除实体完整性、域完整性和参照完整性之外的数据完整性。它反映某一具体应用所涉及的数据必须满足的语义要求。SQL Server提供了定义和检验这类完整性的机制。(1)规则(Rule)。(2)触发器(Trigger)。(3)存储过程(Stored Procedure)。(4)创建数据表时的所有约束(Constraint)。8.2.2 实现数据完整性1.规则规则是对录入数据列中的数据所实施的完整性约束条件,它指定了插入到数据列中的可能值。其特点主要体现在以下几点。(1)规则是SQL Server 2016数据库中独立于表、视图和索引的数据对象,删除表不会删除规则。(2)一个列上可以使用多个规则。2.默认值如果在插入行时没有指定列的值,那么将指定列中所使用的值为默认值。默认值可以是任何取值为常量的对象,如内置函数和数学表达式等。通过以下两种方法可以设定默认值。(1)在CREATE TABLE中使用DEFAULT关键字创建默认定义,将常量表达式指派为列的默认值,这是标准方法。(2)使用CREATE DEFAULT语句创建默认对象,然后使用sp_bindefault系统存储过程将它绑定到列上,这是一个向前兼容的功能。8.2.3 创建、修改和删除约束1.非空约束(1)创建非空约束可以在CREATE TABLE创建表时,使用NOT NULL关键字指定非空约束,其语法格式如下:[CONSTRAINT <约束名>] NOT NULL通过使用NOT NULL关键字指定ID字段不允许空。(2)修改非空约束修改非空约束的语法如下:ALTER TABLE table_namealter column column_name column_type null | not null2.主键约束可以通过定义 PRIMARY KEY 约束来创建主键,用于强制表的实体完整性。一个表只能有一个 PRIMARY KEY 约束,并且 PRIMARY KEY 约束中的列不能接受空值。由于 PRIMARY KEY 约束可保证数据的唯一性,因此经常对标识列定义这种约束。(1)创建主键约束在创建表时创建主键约束在现有表中创建主键约束在现有表中创建主键约束的语法如下:ALTER TABLE table_nameADDCONSTRAINT constraint_namePRIMARY KEY [CLUSTERED | NONCLUSTERED]{(Column[,…n])}3.唯一约束唯一约束UNIQUE用于强制实施列集中值的唯一性。根据 UNIQUE 约束,表中的任何两行都不能有相同的列值。另外,主键也强制实施唯一性,但主键不允许 NULL 作为一个唯一值。(1)创建唯一约束在创建表时创建唯一约束4.检查约束检查约束CHECK可以强制域的完整性。CHECK约束类似于 FOREIGN KEY 约束,可以控制放入列中的值。但是,它们在确定有效值的方式上有所不同:FOREIGN KEY 约束从其他表获得有效值列表,而 CHECK 约束通过不基于其他列中的数据的逻辑表达式确定有效值。(1)创建检查约束在创建表时创建检查约束5.默认约束在创建或修改表时可通过定义默认约束DEFAULT来创建默认值。默认值可以是计算结果为常量的任何值,例如常量、内置函数或数学表达式。这将为每一列分配一个常量表达式作为默认值。(1)创建默认约束在创建表时创建默认约束6.外键约束通过定义 FOREIGN KEY 约束来创建外键。在外键引用中,当一个表的列被引用作为另一个表的主键值的列时,就在两表之间创建了链接。这个列就成为第二个表的外键。(1)创建外键约束在创建表时创建外键约束小 结本章介绍了索引的建立、删除、分析与维护,以及3种数据完整性。读者在了解索引概念的前提下,可以使用SQL Server Management Studio或者SQL语句来建立和删除索引,进而对索引进行分析和维护,以优化对数据的访问。为了保证存储数据的合理性,读者应了解实体完整性、域完整性、引用完整性和用户定义完整性,并能够实施数据完整性机制,包括规则、默认值和约束。 展开更多...... 收起↑ 资源预览