数据库对象.ppt
《数据库对象.ppt》由会员分享,可在线阅读,更多相关《数据库对象.ppt(90页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据库对象管理数据库对象管理3.1索引的概念3.1.1索引的概念3.1.2创建索引的优点与缺点3.1.3考虑建索引的列和不考虑建索引的列23.1.1索引的概念索引是为了加速对表中数据行的检索而创建的一种分散的存储结构。索引是针对一个表而建立的,它是由数据页面以外的索引页面组成的。数据库中的索引是一个列表,在这个列表中包含了某个表中一列或者若干列值的集合,以及这些值的记录在数据表中的存储位置的物理地址。33.1.2索引的优、缺点1.创建索引的优点创建索引的优点可以大大加快数据检索速度。通过创建唯一索引,可以保证数据记录的唯一性。在使用ORDERBY和GROUPBY子句进行检索数据时,可以显著减少
2、查询中分组和排序的时间。使用索引可以在检索数据的过程中使用优化隐藏器,提高系统性能。可以加速表与表之间的连接,这一点在实现数据的参照完整性方面有特别的意义。42.创建索引的缺点创建索引要花费时间和占用存储空间。创建索引需要占用存储空间,如创建聚簇索引需要占用的存储空间是数据库表占用空间的1.2倍。在建立索引时,数据被复制以便建立聚簇索引,索引建立后,再将旧的未加索引的表数据删除。创建索引也需要花费时间。建立索引加快了数据检索速度,却减慢了数据修改速度。因为每当执行一次数据的插入、删除和更新操作,就要维护索引。修改的数据越多,涉及维护索引的开销也就越大。如果将一些数据行插入到一个已经放满行的数据
3、页面上,还必须将这个数据页面中最后一些数据移到下一个页面中去,这样,还必须改变索引页中的内容,以保持数据顺序的正确性。这就是对索引的维护。由于修改数据时要动态维护其索引,所以,对建立了索引的表执行修改操作要比未建立索引的表执行修改操作所花的时间要长。因此,创建索引虽然可以加快数据查询的速度,但是却会减慢数据修改的速度。53.1.3考虑建索引的列和不考虑建索引的列考虑建索引的列和不考虑建索引的列1.考虑建索引的列考虑建索引的列如果在一个列上创建索引,该列就称为索引列。索引列中的值称为关键字值。考虑建索引的列有如下这些:主键通常,检索、存取表是通过主键来进行的。因此,应该考虑在主键上建立索引。连接
4、中频繁使用的列用于连接的列若按顺序存放,系统可以很快地执行连接。如外键,除用于实现参照完整性外,还经常用于进行表的连接。在某一范围内频繁搜索的列和按排序顺序频繁检索的列。62.不考虑建索引的列不考虑建索引的列建立索引需要产生一定的存储开销,在进行插入和更新数据的操作时,维护索引也要花费时间和空间,因此,没有必要对表中的所有列都建立索引。创建索引与否以及在哪些列上建立索引,要看建立索引和维护索引的代价与因建立索引所节省的时间相比哪个更合算。一般来说,如下一些列不考虑建立索引:很少或从来不在查询中引用的列,因为系统很少或从来不根据这个列的值去查找数据行。只有两个或很少几个值的列(如性别,只有两个值
5、“男”或“女”),以这样的列创建索引并不能得到建立索引的好处。以bit、text、image数据类型定义的列。数据行数很少的小表一般也没有必要创建索引。73.2聚簇索引与非聚簇索引3.2.1索引的分类索引的分类根据索引的顺序与数据表的物理顺序是否相同,可以把索引分成两种类型:聚簇索引与非聚簇索引。和表及视图一样,索引也是数据库对象。聚簇索引聚簇索引(ClusteredIndex)数据表的物理顺序和索引表的顺序相同,它根据表中的一列或多列值的组合排列记录。非聚簇索引非聚簇索引(NonclusteredIndex)数据表的物理顺序和索引表的顺序不相同,索引表仅仅包含指向数据表的指针,这些指针本身是
6、有序的,用于在表中快速定位数据。8SQLServer2005中,创建索引有两种方法:使用T-SQL语句创建索引使用SQLServerManagementStudio创建索引在一个表的一个或多个列上创建索引时,应考虑以下几点:当在一个表上创建PRIMARYKEY约束或UNIQUE约束时,SQLServer自动创建唯一性索引。不能在已经创建PRIMARYKEY约束或UNIQUE约束的列上创建索引。定义PRIMARYKEY约束或UNIQUE约束与创建标准索引相比应是首选的方法。必须是表的拥有者才能创建索引。在一个列上创建索引之前,确定该列是否已经存在索引。也可以在视图上创建索引,但创建视图时必须带参
7、数SCHEMABINDING。在视图上创建索引的创建方法参见SQLServer2005随机帮助。3.3索引的创建与管理93.3.1使用T-SQL语句创建索引3.3.2使用T-SQL语句管理索引3.3.3使用SQLServerManagementStudio管理索引3.3索引的创建与管理101.创建索引的创建索引的SQL语句语法语句语法创建索引使用的是CREATEINDEX语句。CREATEINDEX语句的语法形式如下:CREATEUNIQUECLUSTERED|NONCLUSTEREDINDEXindex_nameONtable_name(column_name ASC|DESC,.n)WIT
8、HPAD_INDEX,FILLFACTOR=fillfactor,DROP_EXISTING3.3.1使用T-SQL语句创建索引11在以上语法形式中:UNIQUE:指定创建的索引是唯一索引。如果不使用这个关键字,创建的索引就不是唯一索引。CLUSTERED|NONCLUSTERED:指定被创建索引的类型。使用CLUSTERED创建的是聚簇索引;使用NONCLUSTERED创建的是非聚簇索引。这两个关键字中只能选其中的一个。index_name:为新创建的索引指定的名字。table_name:创建索引的基表的名字。column_name:索引中包含的列的名字。ASC|DESC:确定某个具体的索引
9、列是升序还是降序排序。默认设置为ASC升序。PAD_INDEX和FILLFACTOR:填充因子,它指定SQLServer创建索引的过程中,各索引页的填满程度。DROP_EXISTING:删除先前存在的、与创建索引同名的聚簇索引或非聚簇索引。122.2.创建唯一索引创建唯一索引索引按照结构可分为聚簇索引和非聚簇索引两种不同的类型。按照实现的功能分,有一类索引被称作“唯一索引”。它既可以采用聚簇索引的结构,又可以采用非聚簇索引的结构。唯一索引的特征:唯一索引的特征:不允许两行具有相同的索引值。可用于实施实体完整性。在创建主键约束和唯一约束时自动创建唯一索引。在已有数据的表上创建唯一索引时,如果在该
10、列数据存在重复值,那么系统将返回错误信息。在实际的编程应用中会经常使用到唯一索引。因为在一个表中,可能会有很多列的列值需要保证其唯一性,如:有身份证号、工号、学号等,可在这些列上创建唯一索引。13【例例3-1】在JWGL数据库的BOOK表上创建一个名为book_id_index的唯一性聚簇索引,索引关键字为book_id,升序,填充因子50%USEjwglGOCREATEUNIQUECLUSTEREDINDEXbook_id_indexONbook(book_idASC)WITHFILLFACTOR=50143.创建复合索引创建复合索引有些索引列只有一列,而有些索引列由两列或更多列组成。我们把
11、由两列或更多列组成的索引称作“复合索引”。复合索引的特征复合索引的特征把两列或更多列指定为索引列。将复合列作为一个整体进行搜索。创建复合索引中的列序不一定与表定义列序相同。【例例-2】在JWGL数据库的student_course表上创建一个名为student_course_index的非聚簇复合索引,索引关键字为student_id,course_id,升序,填充因子50%USEjwglGOCREATENONCLUSTEREDINDEXstudent_course_indexONstudent_course(student_idASC,course_idASC)WITHFILLFACTOR=
12、5015创建复合索引应注意的几点创建复合索引应注意的几点查询的WHERE子句必须引用复合索引中的第一列,以便让查询优化程序使用该复合索引。被查询表中需要频繁访问的列应考虑建复合索引以提高查询性能。在一个复合索引中索引列最多可组合16列。列的顺序很重要,应首先定义最具唯一性的列,(column1,column2)上的索引不同于(column2,column1)上的索引。使用复合索引能增加查询性能,并减少表上创建索引的数量。161.使用使用T-SQL语句查看索引语句查看索引在创建索引之前或在创建索引之后,可以用sp_helpindex或sp_help系统存储过程查看表的索引。【例例3-3】用系统存
13、储过程sp_helpindex查看JWGL数据库中表book的索引信息。USEjwglGOEXECsp_helpindexbook3.3.2使用T-SQL语句管理索引172.使用使用T-SQL语句对索引更名语句对索引更名在创建索引之后,可以用sp_rename系统存储过程重新命名表的索引。【例例3-4】用系统存储过程sp_rename将表book的索引book_id_index重新命名为book_id_index1。USEjwglGOsp_renamebook.book_id_index,book_id_index1注意:要重命名的索引要以“表名.索引名”的形式给出。但新索引名不能给出表名。但
14、新索引名不能给出表名。183.使用使用T-SQL语句删除索引语句删除索引在创建索引之后,如果该索引不再需要,可以用DROP语句将其删除。DROP语句的语法如下:DROPINDEXtable.index,.n【例例3-5】用DROP语句将表book的索引“book_id_index1”删除。USEjwglGODROPINDEXbook.book_id_index1注意:注意:被删除的索引要以“表名.索引名”的形式给出。删除索引时要注意,如果索引是在CREATETABLE语句中创建的,只能用ALTERTABLE语句删除索引。如果索引是用CREATEINDEX创建的,可用DROPINDEX删除。19
15、使用SQLServerManagementStudio可以创建索引。3.3.3使用SQLServerManagementStudio管理索引20在SQLServerManagementStudio的“对象资源管理器”面板中,使用与创建索引同样的方法即可看到该索引对应的信息。使用系统存储过程sp_helpindex查看指定表的索引信息。【例6.5】使用系统存储过程sp_helpindex查看book数据库中book1表的索引信息。在SQLServerManagementStudio查询窗口中运行如下命令:USEbookGOEXECsp_helpindexbook1GO显示索引信息21使用SQLS
16、erverManagementStudio删除索引。3.3.3使用SQLServerManagementStudio管理索引223.2视图视图是一种数据库对象,是从一个或者多个数据表或视图中导出的虚表,视图的结构和数据是对数据表进行查询的结果。视图被定义后便存储在数据库中,通过视图看到的数据只是存放在基表中的数据。当对通过视图看到的数据进行修改时,相应的基表的数据也会发生变化,同时,若基表的数据发生变化,这种变化也会自动地反映到视图中。视图可以是一个数据表的一部分,也可以是多个基表的联合;视图也可以由一个或多个其他视图产生。一旦视图定义后,就可以用select语句象对真实表一样查询。233.2
17、.1创建视图使用Transact-SQL语句创建视图1.创建视图的SQL语句的语法形式CREATEVIEW.view_name(column_name,.n)WITHENCRYPTIONASselect_statementFROMtable_nameWHEREsearch_conditionWITHCHECKOPTION其中:view_name:为新创建的视图指定的名字,视图名称必须符合标识符规则。column_name:在视图中包含的列名,也可以在SELECT语句中指定列名。24table_name:视图基表的名字。select_statement:选择哪些列进入视图的SELECT语句。WH
18、EREsearch_condition:基表数据进入视图所应满足的条件WITHCHECKOPTION:迫使通过视图执行的所有数据修改语句必须符合视图定义中设置的条件。WITHENCRYPTION:对视图的定义进行加密。2.用SQL语句创建视图的步骤在创建视图时,应首先测试SELECT语句以确保能返回正确的结果。创建视图的步骤如下:编写用于创建视图的SELECT语句。对SELECT语句进行测试。检查测试结果是否正确,是否和预期的一样。创建视图。253.在创建视图的时候,应该考虑以下因素在CREATEVIEW语句中,不能包括ORDERBY、GROUPBY子句,也不能出现INTO关键字。创建视图所参
19、考基表的列数最多为1024列。创建视图不能参考临时表。在一个批处理语句中,CREATEVIEW语句不能和其他Transact-SQL语句混合使用。尽量避免使用外连接创建视图。26使用SQLServerManagementStudio创建视图假设要从student表中建立一个性别为“男”、包含student_id、student_name、class_id、sex四列信息的视图。使用SQLServerManagementStudio创建视图的具体步骤如下:1)首先进入SQLServerManagementStudio。2)按顺序展开“数据库”、要创建视图所属的数据库、再展开“视图”子节点。3)右
20、边“摘要”窗口显示的是数据库中已经存在的视图,右击窗口的空白处,在弹出的快捷菜单上选择“新建视图”项,系统弹出如图9-1的“添加表”窗口,这个窗口用于为新创建的视图提供基础数据。该窗口有三个选项卡,表、视图及函数,这意味着可以以表、视图及表值函数为基础数据创建新的视图。274)点击“添加”,选择表student,再点击“关闭”。系统呈现如图9-2的视图建立窗口。图9-1 创建视图的窗口28图9-2视图建立窗口29在SQL查询条件窗格中输入查询条件语句:SELECTstudent_id,student_name,class_id,sexFROMstudentWHEREsex=15)确认结果正确后
21、,点击工具栏上的“”按钮,保存当前创建的视图,输入视图的名称,点击“确定”按钮,一个视图也就创建完成了。303.2.2使用视图的优点和缺点1.视图的优点视图可以屏蔽数据的复杂性,简化用户对数据库的操作,还可以使用视图重新组织数据。视图可以让不同的用户以不同的方式看到不同或者相同的数据集。安全保护:视图可以定制不同用户对数据的访问权限。2.视图的缺点性能降低:修改的限制:313.2.3创建水平视图视图的常见用法是限制用户只能够存取表中的某些数据行,用这种方法产生的视图称为水平视图,即表中行的子集。【例9-1】在数据库JWGL的表student上创建一个视图student_view1,视图的数据包
22、括班级号为g99402或g99403所有学生的资料。USEjwglGOCREATEVIEWstudent_view1ASSELECT*FROMstudentWHERE(class_id=g99402ORclass_id=g99403)323.2.4创建投影视图如果限制用户只能存取表中的部分列的数据,那么,使用这种方法创建的视图就称为投影视图,即表中列的子集。【例9-2】创建一个名为“studdent_view2”的视图,它从数据库JWGL的student表中查询出性别为“男”的所有学生的姓名、性别、家庭住址资料。USEjwglGOCREATEVIEWstudent_view2ASSELECTs
23、tudent_idAS学号,student_nameAS姓名,sexAS性别,class_idAS班级,home_addrAS家庭住址,entrance_dateAS入学时间,birthAS出生年月FROMstudentWHEREsex=1WITHCHECKOPTION333.2.5创建联合视图使用视图的一个原因是简化多表查询,可以生成从多个表中提取数据的联合视图(joinedView)把查询结果表示为一个单独的“可见表”。【例9-3】创建一个名为“student_view3”的视图,它是由表course、book及class_course创建的一个显示“g99402”班所开课程的课程名、所用
24、教材的教材名、出版社及作者的视图。USEjwglGOCREATEVIEWstudent_view3WITHENCRYPTION/*加密视图*/ASSELECTcourse.course_nameAS课程名,book.book_nameAS书名,book.publish_companyAS出版社,book.authorAS作者FROMcourse,book,class_courseWHERE(course.book_id=book.book_idANDclass_course.course_id=course.course_id)AND(class_course.class_id=g99402)
25、343.2.6创建包含集合函数的视图在视图定义中可以包含GROUPBY和集合函数,从而将这些汇总数据放到一个“可见”的表中,允许用户对它们做进一步的查询。要注意,出现在SELECT子句中的列名,要么包含在集合函数中,要么包含在GROUPBY子句中。【例9-4】使用集合函数SUM和GROUPBY子句以student_course表为基表,创建一个名为“student_sum_view4”、能显示所有学生学号和总成绩的视图。USEjwglGOCREATEVIEWstudent_sum_view4(学号,总成绩)ASSELECTstudent_id,sum(grade)FROMstudent_cou
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 对象
限制150内