第6章创建数据库表索引和约束教学课件.ppt
《第6章创建数据库表索引和约束教学课件.ppt》由会员分享,可在线阅读,更多相关《第6章创建数据库表索引和约束教学课件.ppt(101页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1 6.1 创建和管理索引创建和管理索引 6.2 数据库数据的完整性数据库数据的完整性3 索引是数据库对象之一,数据库中的索引是对索引是数据库对象之一,数据库中的索引是对数据库表中的一个或多个列(字段)的值进行排序数据库表中的一个或多个列(字段)的值进行排序的一种结构。索引提供指针以指向存储在表中指定的一种结构。索引提供指针以指向存储在表中指定字段的数据值,然后根据指定的排序次序排列这些字段的数据值,然后根据指定的排序次序排列这些指针。检索(查询)时,数据库通过搜索索引找到指针。检索(查询)时,数据库通过搜索索引找到特定的值,然后跟随指针在表中找到该值的行,因特定的值,然后跟随指针在表中找到该
2、值的行,因此,索引类似一本书的目录,提供了快速访问表中此,索引类似一本书的目录,提供了快速访问表中数据的途径。本章将介绍索引的概念、分类以及如数据的途径。本章将介绍索引的概念、分类以及如何使用何使用SQL Server 2005提供的提供的SQL Server Management Studio管理控制台(企业管理器)或在管理控制台(企业管理器)或在查询分析器中使用查询分析器中使用Transact-SQL语言创建、修改和语言创建、修改和删除索引等。合理地创建和利用索引,将有效地提删除索引等。合理地创建和利用索引,将有效地提高数据库数据的检索速度,提高数据库的性能。高数据库数据的检索速度,提高数
3、据库的性能。4 数据库数据的完整性是指数据库运行时,数据库数据的完整性是指数据库运行时,应防止输入或输出数据出现不符合语义的错应防止输入或输出数据出现不符合语义的错误数据出现,而始终保持数据库表数据的正误数据出现,而始终保持数据库表数据的正确性。数据库的完整性描述是数据库内容的确性。数据库的完整性描述是数据库内容的完整性约束的集合,对一个数据库进行操作完整性约束的集合,对一个数据库进行操作时,首先要判定其是否符合完整性约束,全时,首先要判定其是否符合完整性约束,全部判定无误时才可以执行。为此,本章还将部判定无误时才可以执行。为此,本章还将介绍数据库数据完整性的概念以及为实现数介绍数据库数据完整
4、性的概念以及为实现数据库数据的完整性,如何使用据库数据的完整性,如何使用SQL Server 2005提供的提供的SQL Server Management Studio管理控制台(企业管理器)或在查询分析器管理控制台(企业管理器)或在查询分析器中使用中使用Transact-SQL语言设置主键约束、惟语言设置主键约束、惟一性约束、检查性约束、外键约束和默认约一性约束、检查性约束、外键约束和默认约束等束等。5 在数据库中,在数据库中,SQL Server可以使用两种方式访问数据可以使用两种方式访问数据库表中的数据。库表中的数据。(1)使用表扫描方式(读取每页的数据)访问数据:)使用表扫描方式(读
5、取每页的数据)访问数据:SQL Server执行表扫描时,从表的起始处开始,对表中的执行表扫描时,从表的起始处开始,对表中的所有数据页进行扫描,提取满足查询条件的记录。所有数据页进行扫描,提取满足查询条件的记录。(2)使用索引方式访问数据:如果表中已经建立了索引,)使用索引方式访问数据:如果表中已经建立了索引,则可以通过遍历索引来查找满足查询条件的记录。则可以通过遍历索引来查找满足查询条件的记录。一个表,若没有创建索引,一个表,若没有创建索引,SQL Server是通过读是通过读SQL命命令中指定表的数据来访问,即采用表扫描的方式进行查询,令中指定表的数据来访问,即采用表扫描的方式进行查询,这
6、种方式就好像在图书馆的书架上查找一本书,需要把所这种方式就好像在图书馆的书架上查找一本书,需要把所有的书都查找一遍,显然,效率很低。实际上,查找一本有的书都查找一遍,显然,效率很低。实际上,查找一本书并不需要将书架上的所有书都找一遍,有很多查找方法,书并不需要将书架上的所有书都找一遍,有很多查找方法,如按类别、按拼音排序等。如按类别、按拼音排序等。6 如果需要查询表中的所有记录,则表扫描可如果需要查询表中的所有记录,则表扫描可能是最有效的方法。但是,对于企业数据库而言,能是最有效的方法。但是,对于企业数据库而言,数据量庞大,往往查询只涉及表中的少量信息。数据量庞大,往往查询只涉及表中的少量信息
7、。采用表扫描的方式速度慢、效率低,而使用索引采用表扫描的方式速度慢、效率低,而使用索引查询将能更快、而有效地获得信息。因此索引是查询将能更快、而有效地获得信息。因此索引是数据库应用中常用而重要的数据库对象,使用索数据库应用中常用而重要的数据库对象,使用索引,可以有效地提高数据库的检索速度,改善数引,可以有效地提高数据库的检索速度,改善数据库的性能。据库的性能。带索引的表在数据库中要占据较多的空间,此带索引的表在数据库中要占据较多的空间,此外,为了维护索引,对数据进行插入、更新、删外,为了维护索引,对数据进行插入、更新、删除操作的命令所花费时间将更长。所以设计索引除操作的命令所花费时间将更长。所
8、以设计索引时应根据数据库的实际情况设置相应的索引。时应根据数据库的实际情况设置相应的索引。71索引的设计原则索引的设计原则 在实际应用中,数据库的结构是多种在实际应用中,数据库的结构是多种多样的,设计索引时应注意以下问题:多样的,设计索引时应注意以下问题:(1)要分析是否有必要为数据表中的某个列)要分析是否有必要为数据表中的某个列(字段)创建索引;应考虑对某列创建索(字段)创建索引;应考虑对某列创建索引,是否有利于查询。索引对于精确查询引,是否有利于查询。索引对于精确查询(例如:(例如:WHERE 学号学号=0210001的查询)、的查询)、范围查询(例如范围查询(例如WHERE 年龄年龄 b
9、etween 20 and 30的查询)、搜索已定义了外键约束的的查询)、搜索已定义了外键约束的两个表之间匹配的行都是有利的,这时应两个表之间匹配的行都是有利的,这时应对该列创建索引。对该列创建索引。8(2)如果一个表中建有较多索引,会影)如果一个表中建有较多索引,会影响响INSERT、UPDATE和和DELETE语句的性语句的性能。这是因为当表中的数据更改时,所有索能。这是因为当表中的数据更改时,所有索引都需进行相应调整。但是,对于不需要修引都需进行相应调整。但是,对于不需要修改数据的查询(如:改数据的查询(如:SELECT语句),大量语句),大量索引将有助于提高性能。索引将有助于提高性能。
10、(3)小型表一般不需要创建索引,因为)小型表一般不需要创建索引,因为此时在此时在SQL Server中遍历索引所花费的时间中遍历索引所花费的时间会比对表扫描长得多。会比对表扫描长得多。9(4)一般需要在频繁搜索的字段上创建索引,如下)一般需要在频繁搜索的字段上创建索引,如下所示:所示: 主关键字所在的字段:主键字段包含唯一值,利主关键字所在的字段:主键字段包含唯一值,利用主键能够迅速完成单行查找,而且主关键字还经常用主键能够迅速完成单行查找,而且主关键字还经常用来作为连接查询中与其它表进行关联的条件。用来作为连接查询中与其它表进行关联的条件。 外(部)关键字所在的字段或在连接查询中经常外(部)
11、关键字所在的字段或在连接查询中经常使用的字段:使用使用的字段:使用JOIN子句进行连接查询时,需要使子句进行连接查询时,需要使用外(部)关键字与父表进行关联。用外(部)关键字与父表进行关联。 按关键字的范围值进行搜索的字段:查询中的按关键字的范围值进行搜索的字段:查询中的WHERE子句可以指定按某个关键字的范围值搜索数子句可以指定按某个关键字的范围值搜索数据。据。 按关键字的排序顺序访问的列:经常使用按关键字的排序顺序访问的列:经常使用ORDER BY子句对数据按某个顺序进行排序的字段。子句对数据按某个顺序进行排序的字段。10(5)下列情况一般不需要使用索引:)下列情况一般不需要使用索引: 在
12、查询中很少涉及的字段:大量使用索引会占用在查询中很少涉及的字段:大量使用索引会占用大量的存储空间,因此,对于查询几乎不会使用的字大量的存储空间,因此,对于查询几乎不会使用的字段,不需要创建索引。段,不需要创建索引。 对具有大量重复值的字段:(如:性别字段)进对具有大量重复值的字段:(如:性别字段)进行索引是没有意义的,此时用表扫描的方法要好一些。行索引是没有意义的,此时用表扫描的方法要好一些。 更新性能比查询性能更重要的字段:因为在被索更新性能比查询性能更重要的字段:因为在被索引的字段上修改数据时,引的字段上修改数据时,SQL Server将更新相关的索将更新相关的索引,而维护索引是需要较多的
13、资源开销,并影响系统引,而维护索引是需要较多的资源开销,并影响系统性能。性能。 定义为定义为text、ntext或或image数据类型的字段:在数据类型的字段:在SQL Server中定义为大对象数据的字段不能被索引。中定义为大对象数据的字段不能被索引。11(6)对表中的外键码字段创建索引时,首)对表中的外键码字段创建索引时,首先创建聚集索引,然后创建非聚集索引;当先创建聚集索引,然后创建非聚集索引;当使用多种检索方式搜索信息时,应当创建复使用多种检索方式搜索信息时,应当创建复合索引。合索引。总之,通常情况下只有经常查询索引字段总之,通常情况下只有经常查询索引字段中的数据时,才需要在表上创建索
14、引。索引中的数据时,才需要在表上创建索引。索引将占用磁盘存储空间,并且降低添加、删除将占用磁盘存储空间,并且降低添加、删除和更新记录的速度。在多数情况下,索引所和更新记录的速度。在多数情况下,索引所带来的数据检索速度的优势大大超过了它的带来的数据检索速度的优势大大超过了它的不足之处。然而,如果应用程序非常频繁地不足之处。然而,如果应用程序非常频繁地更新数据,或磁盘存储空间有限,那么最好更新数据,或磁盘存储空间有限,那么最好限制索引及索引的数量。限制索引及索引的数量。122索引的类型索引的类型SQL Server 2005 的索引主要有聚集索引和非聚集索的索引主要有聚集索引和非聚集索引两种类型。
15、引两种类型。(1)聚集索引:聚集索引是对表中的数据按键值进)聚集索引:聚集索引是对表中的数据按键值进行排序和重新存储这些数据行(记录)。由于数行排序和重新存储这些数据行(记录)。由于数据行按基于聚集索引键的排序次序存储,因此聚据行按基于聚集索引键的排序次序存储,因此聚集索引对查询记录很有效。在聚集索引中,表中集索引对查询记录很有效。在聚集索引中,表中各行的物理顺序与索引键值的逻辑顺序相同,因各行的物理顺序与索引键值的逻辑顺序相同,因此每个表只能建一个聚集索引。如果一个表没有此每个表只能建一个聚集索引。如果一个表没有创建聚集索引,其数据行将按堆集方式存储。创建聚集索引,其数据行将按堆集方式存储。
16、(2)非聚集索引:非聚集索引具有完全独立于数据)非聚集索引:非聚集索引具有完全独立于数据行(记录)的结构,使用非聚集索引不会影响表行(记录)的结构,使用非聚集索引不会影响表中记录的实际存储顺序。非聚集索引使用索引存中记录的实际存储顺序。非聚集索引使用索引存储,因此非聚集索引比聚集索引需要较少的存储储,因此非聚集索引比聚集索引需要较少的存储空间。空间。13聚集索引和非聚集索引的根本区别是表记录的排列聚集索引和非聚集索引的根本区别是表记录的排列顺序与索引的排列顺序是否一致,在聚集索引中表顺序与索引的排列顺序是否一致,在聚集索引中表记录的排列顺序与索引的排列顺序一致,其优点是:记录的排列顺序与索引的
17、排列顺序一致,其优点是:查询速度快,因为一旦具有第一个索引值的记录被查询速度快,因为一旦具有第一个索引值的记录被找到,具有连续索引值的记录会一定物理地紧跟其找到,具有连续索引值的记录会一定物理地紧跟其后;聚集索引的缺点是:对表进行修改时修改速度后;聚集索引的缺点是:对表进行修改时修改速度较慢,原因是为了保持表中记录的物理顺序与索引较慢,原因是为了保持表中记录的物理顺序与索引顺序一致,而必须在数据页中对相关后的数据进行顺序一致,而必须在数据页中对相关后的数据进行重新排序,以把记录插入到数据页的相应位置,重重新排序,以把记录插入到数据页的相应位置,重而降低了查询速度。建议以下情况可以使用聚集索而降
18、低了查询速度。建议以下情况可以使用聚集索引:引: 此字段包含有限数目的不同值;此字段包含有限数目的不同值; 查询结果将返回一个区间的值;查询结果将返回一个区间的值; 查询结果将返回大量相同的结果集。查询结果将返回大量相同的结果集。14 非聚集索引中各记录的的物理顺序与索非聚集索引中各记录的的物理顺序与索引的排列顺序不一致。非聚集索引比聚集引的排列顺序不一致。非聚集索引比聚集索引层次多,添加记录不会引起数据顺序索引层次多,添加记录不会引起数据顺序的重组。由于一个表只能创建一个聚集索的重组。由于一个表只能创建一个聚集索引,当需要建立多个索引时,可以使用非引,当需要建立多个索引时,可以使用非聚集索引
19、,每个表中可以建立聚集索引,每个表中可以建立249个非聚集个非聚集索引。建议以下情况可以使用非聚集索引:索引。建议以下情况可以使用非聚集索引: 含有大量唯一值的字段;含有大量唯一值的字段; 查询结果返回的是少量的结果集;查询结果返回的是少量的结果集; 使用使用ORDER BY 子句的查询。子句的查询。15 此外,此外,SQL Server 2005还可创建复合索还可创建复合索引和唯一索引。复合索引是对多个字段的组引和唯一索引。复合索引是对多个字段的组合创建索引,一个表中的复合索引最多可以合创建索引,一个表中的复合索引最多可以有有16个字段组合;如果要求索引中的字段值个字段组合;如果要求索引中的
20、字段值不能重复,可以建立唯一索引。对于已经建不能重复,可以建立唯一索引。对于已经建立唯一索引的数据表,向表中添加记录或修立唯一索引的数据表,向表中添加记录或修改原有记录时,系统将检查添加的记录或修改原有记录时,系统将检查添加的记录或修改后的记录是否满足唯一性要求,否则将不改后的记录是否满足唯一性要求,否则将不接受添加或修改的记录。接受添加或修改的记录。16 对一个表创建索引可以使用对一个表创建索引可以使用SQL Server 2005提供的提供的SQL Server Management Studio管理控制台(企业管理器),也可以在查询管理控制台(企业管理器),也可以在查询分析器中使用分析器
21、中使用Transact-SQL语言创建表的索语言创建表的索引。引。 此外,有些索引并不需要数据库用户自此外,有些索引并不需要数据库用户自己创建,在己创建,在SQL Server 2005中建立或修改数中建立或修改数据表时,如果创建或添加了主键约束或唯一据表时,如果创建或添加了主键约束或唯一性约束,系统会基于添加约束的字段自动创性约束,系统会基于添加约束的字段自动创建主键索引或唯一性索引。建主键索引或唯一性索引。171使用企业管理器创建索引使用企业管理器创建索引 启动启动SQL Server Management Studio管理控制台,管理控制台,在在“对象资源管理器对象资源管理器”中展开指定
22、的服务器和数据库,中展开指定的服务器和数据库,打开表文件夹,右击要创建索引的表(如:选择打开表文件夹,右击要创建索引的表(如:选择TSGL数据库的数据库的“学生学生”表),从弹出的快捷菜单中表),从弹出的快捷菜单中选择选择“修改修改”命令,就会打开命令,就会打开“表设计器表设计器”,在,在“表表设计器设计器”中显示该表的表结构,右击中显示该表的表结构,右击“表设计器表设计器”窗窗口,从弹出的快捷菜单中选择口,从弹出的快捷菜单中选择“索引索引/键键”命令,如图命令,如图6-1所示。所示。 选择选择“索引索引/键键”命令后,将弹出命令后,将弹出“索引索引/键键”对话对话框,如图框,如图6-2所示。
23、进入所示。进入“索引索引/键键”对话框也可以在对话框也可以在工具栏中点击工具栏中点击“管理索引和键管理索引和键”按钮。在按钮。在“索引索引/键键”对话框中显示已经存在的对该数据库表的索引(见图对话框中显示已经存在的对该数据库表的索引(见图6-2中的中的“PK_学生学生”索引,该索引是按索引,该索引是按“学号学号”字段字段建立的),这时可以单击建立的),这时可以单击【添加添加】按钮或单击按钮或单击【删除删除】按钮来新建一个索引或删除一个索引。按钮来新建一个索引或删除一个索引。18图图6-1 在在“表设计器表设计器”中选择索引中选择索引/键命令键命令19图图6-2 “索引索引/键键”对话框对话框2
24、0 单击单击【添加添加】按钮,系统将自动创建一个按钮,系统将自动创建一个“IX_学生学生*”的索引,如图的索引,如图6-3所示。可以在右面的属性所示。可以在右面的属性窗格内对该索引属性进行编辑。窗格内对该索引属性进行编辑。 如果对如果对“学生学生”表按表按“姓名姓名”字段建立一个新字段建立一个新索引,那么可以在编辑窗格内,通过索引,那么可以在编辑窗格内,通过“标识标识”窗格窗格可以修改索引的名称为可以修改索引的名称为IX_姓名;通过姓名;通过“常规常规”窗格窗格中列行右边的中列行右边的【】按钮,选择索引字段为按钮,选择索引字段为“姓姓名名”,排序顺序为升序;表设计器内系统默认的索,排序顺序为升
25、序;表设计器内系统默认的索引类型为非聚集索引。这样就完成了对新建索引的引类型为非聚集索引。这样就完成了对新建索引的创建,如图创建,如图6-4所示。所示。21图图6- 3 新建索引新建索引22图图6- 4 按姓名字段新建索引按姓名字段新建索引232使用使用Transact-SQL语言创建索引语言创建索引使用使用Transact-SQL语言创建索引的命令是:语言创建索引的命令是: CREATE INDEX。其基本语法格式如下:其基本语法格式如下:CREATE UNIQUE CLUSTERED| NOTCLUSTERED INDEX index_nameON table | view ( colum
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 创建 数据库 索引 约束 教学 课件
限制150内