版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
DM
数据库原理及应用项目6优化查询学生信息管理数据库目录01使用索引优化查询性能02使用视图优化查询性能03使用物化视图优化查询性能情景导入之前李老师给同学们布置了一项任务:向学生基本信息表student_new中插入100万条记录。王宁按照任务要求和李老师提供的SQL脚本,花费近1个小时的时间,将100万条记录成功插入了学生基本信息表student_new中。在完成记录的插入后,他尝试使用SELECT语句查询SNO为1000000的记录,发现用时26.83s(不同机器、不同配置,时间稍有偏差)。这个响应时间太长了,让人无法忍受,可是王宁不知道怎样才能优化查询速度。李老师告诉王宁,为了提高学生信息管理数据库中数据的安全性、完整性和查询速度,在应用系统的实际开发过程中,开发人员一般会利用索引、视图等来提高系统响应速度和其他性能。使用索引优化查询性能任务6-1【任务提出】为了提高查询速度,王宁需要在学生基本信息表student_new的sno字段上创建唯一索引id_sno,并通过查询sno为1000000的记录,验证查询速度是否明显提升。(一)索引概述索引是为了快速检索和定位数据行而创建的一种数据结构。索引由表中索引列数据进行排序后的集合和指向这些值的物理标识(例如ROWID等聚集索引键)共同组成。在DM中,除了位图索引、位图连接索引、全文索引和空间索引外,索引数据都采用B+树结构进行存储,索引和表一样,都需要存储空间。在某种程度上,可以把数据库看作一本书,把索引看作书的目录,通过目录中的页码标识快速检索并定位到要查找的书中内容,显然比查找没有目录的书更方便、快捷。(一)索引概述索引一旦创建,将由数据库自动管理和维护。例如,向表中插入、更新和删除数据时,数据库会自动在索引中做出相应的修改。在编写SQL查询语句时,具有索引的表与不具有索引的表没有任何区别,索引只提供快速访问指定数据的方法。(二)索引的类型从物理存储角度分类:聚集索引和非聚集索引。聚集索引(又称为一级索引、主索引):按照聚集索引键构造一棵B+树,表数据存储在B+树叶子节点上,通过定位索引可直接在B+树中找到数据。每一个表有且只有一个聚集索引。非聚集索引(又称为二级索引、辅助索引):将二级索引列和聚集索引列共同存储在B+树叶子节点上。如果查找非聚集索引键值或聚集索引键值可直接在B+树中找到;如果查找索引键值以外的数据,则需要回到一级索引中进行查找。每一个表可以有多个非聚集索引。
1.
从物理存储角度分类(二)索引的类型从索引功能角度进行分类,可分为唯一索引、函数索引、位图索引、位图连接索引、全文索引、空间索引、数组索引、普通索引。唯一索引:索引数据根据索引键唯一;函数索引:包含函数/表达式的预先计算的值;位图索引:对低基数的列创建位图索引;位图连接索引:针对两个或者多个表连接的位图索引,主要用于数据仓库中;全文索引:在表的文本列上而建的索引。空间索引:在空间数据上创建的索引,专用于DMGEO包中;数组索引:在一个只包含单个数组成员的对象列上创建的索引;普通索引:除了唯一索引、函数索引、位图索引、位图连接索引、全文索引、空间索引、数组索引以外的索引,均为普通索引。2.
从索引功能角度分类(二)索引的类型从虚实角度进行分类,可分为虚索引和实索引。虚索引:创建PRIMARYKEY主键约束或UNIQUE唯一约束时,系统会自动创建一个相关的唯一索引。因为不需要用户创建,因此称为虚索引。实索引:虚索引以外的索引均为实索引。3.
虚索引和实索引(二)索引的类型从索引键值的个数进行分类,可分为单列索引和复合索引。单列索引:只有一个索引键的索引。复合索引:含有多个索引键的索引。4.
单列索引和组合索引(三)索引的设计原则1.
在表中插入数据后创建索引一般情况下,在插入或装载了数据后,为表创建索引会更加有效率。如果在装载数据之前创建了一个或多个索引,那么在插入每行时DM8都必须更改和维护每个索引,使得插入效率降低。(三)索引的设计原则2.
选取合适的表和列创建索引可以参考下面的准则决定何时创建索引。如果需要经常检索大表中的少量的行,就为查询键创建索引;为了改善多个表的连接的性能,可为连接列创建索引;主键和唯一键自动具有索引,在外键上很多情况下也创建索引;数据量小的表不需要创建索引。可以参考下面的准则选取表中的索引列。列中的值相对比较唯一;列中的值取值范围大,适合建立索引;列中的值的数据类型为CLOB和TEXT时只能建立全文索引、BLOB不能创建任何索引。(三)索引的设计原则3.
根据性能选择合适的索引列在CREATEINDEX语句中列的排序会影响查询的性能。通常,将最常用的列放在最前面。如果查询中有多个字段组合定位,则应该创建一个组合索引,而不是为每个字段单独创建索引。且按照等值字段在前、非等值字段在后的原则创建组合索引,查询时只能利用一个非等值的字段。(三)索引的设计原则4.
限制每个表的索引的数量一个表可以有任意数量的索引。但是,索引越多,修改表数据的开销就越大。因此,在从表中检索数据的速度和更新表的速度之间有一个折衷。例如,如果一个表主要用于读,则索引多就有好处;如果一个表经常被更新,则不宜创建过多索引。(三)索引的设计原则5.
估计索引大小和设置存储参数创建索引之前先估计索引的大小能够更好地促进规划和管理磁盘空间。创建索引时,可以设置适当的存储参数,并改善使用该索引的应用的I/O性能。6.
为每个索引指定表空间可以在除临时表空间、日志表空间和回滚段表空间外的其他任何表空间中创建索引,也可以在与创建索引的表的相同或不同的表空间中创建索引。(四)使用DM管理工具Manager创建索引创建索引是指在某个表的一个字段或多个字段上建立一个索引,以提高对表的访问速度。要在用户自己的模式中创建索引,至少要满足如下条件之一。(1)被索引的表在用户自己的模式中。(2)在要被索引的表上有CREATEINDEX权限。(3)具有CREATEANYINDEX数据库权限。要在其他模式中创建索引,用户必须具有CREATEANYINDEX数据库权限。创建唯一索引时,应保证创建索引的字段不包括重复的数据,并且没有两个或两个以上的空值,因为创建索引时将两个空值也视为重复的数据。如果有这种数据,就必须先将其删除,否则不能成功创建索引。(四)使用DM管理工具Manager创建索引下面为GRADEM模式中的STUDENT表创建一个SNAME列上的普通索引INDEX_SNAME,并设置初始分配簇数为50,下次分配簇数为50。操作步骤如下。(1)启动DM管理工具Manager,并建立与数据库的连接。(2)在【对象导航】窗格中依次展开【LOCALHOST】|【模式】|【GRADEM】|【表】|【STUDENT】,用鼠标右键单击【索引】节点,从快捷菜单中选择【新建索引(N)...】选项,如图6.1所示。(3)分别在【新建索引】对话框中确定【索引名称】【索引类型】【索引列】等信息,如图6.2所示。图6.1【新建索引】选项
图6.2【新建索引】对话框(四)使用DM管理工具Manager创建索引(4)在【新建索引】对话框中切换到【存储】选项,设置初始分配簇数为50,下次分配簇数为50,如图6.3所示。单击【确定】按钮,该索引创建成功。此时,我们可以在【索引】选项中看到新创建的索引INDEX_SNAME,如图6.4所示。图6.3【存储】界面
图6.4创建完成的索引INDEX_SNAME【提示】如果没有给索引指定存储选项,则初始分配簇数和下次分配簇数等存储选项会自动使用表空间的默认存储选项。(五)使用DM_SQL语句创建索引在DM_SQL中,可以使用CREATEINDEX语句创建索引,其语法格式如下。CREATE[ORREPLACE][CLUSTER|NOTPARTIAL][UNIQUE|BITMAP|SPATIAL]INDEX[IFNOTEXISTS]<索引名>ON[<模式名>.]<表名>(<索引列表达式>[,…])[<表空间子句>][<STORAGE子句>];(五)使用DM_SQL语句创建索引参数说明如下:(1)ORREPLACE:如果要创建的索引已存在,则替换它,如果不存在,则创建该索引。(2)CLUSTER|NOTPARTIAL:是可选参数,二者选一,分别表示聚集索引、非聚集索引,缺省即为非聚集索引。(3)UNIQUE|BITMAP|SPATIAL:是可选参数,三者选一,分别表示唯一索引、位图索引和空间索引。(4)IFNOTEXISTS:表示“如果不存在”,首先判断该索引是否存在,如果该索引不存在,则创建该索引。(5)索引名:指定索引的名称,索引名称最大长度为128字节。(6)模式名:指定被创建索引的表属于哪个模式,缺省为当前模式。(7)表名:指定被创建索引的表的名称。(8)索引列表达式:指明被创建的索引列,可以为表中列、以表中列为变量的函数或表达式(9)表空间子句:不能和STORAGE子句中的ON<表空间名>同时使用;(10)STORAGE子句:指明索引的存储选项,其参数及用法如下:[INITIAL<初始分配簇数>]|[NEXT<下次分配簇数>]|[MINEXTENTS<最小保留簇数>]|[ON<表空间>](五)使用DM_SQL语句创建索引【例6.1】为STUDENT表的SNO字段创建唯一索引ID_SNO。CREATEUNIQUEINDEXID_SNOONGRADEM.STUDENT(SNO);【例6.2】为STUDENT表的SBIRTHDAY字段创建普通索引ID_BIRTH。CREATEINDEXID_BIRTHONGRADEM.STUDENT(SBIRTHDAY);(六)修改索引1.使用DM管理工具Manager修改索引修改GRADEM模式中STUDENT表的索引INDEX_SNAME,将索引列修改为SNAME和SSEX的组合,并设置最小保留簇数为10。操作步骤如下。(1)启动DM管理工具Manager,并建立与数据库的连接。在【对象导航】窗格中依次展开【LOCALHOST】|【模式】|【GRADEM】|【表】|【STUDENT】|【索引】选项,用鼠标右键单击【INDEX_SNAME】节点,从快捷菜单中选择【修改(M)...】选项,如图6.5所示。图6.5【修改索引】选项(六)修改索引1.使用DM管理工具Manager修改索引(2)分别在【修改索引】对话框中确定为索引列添加SSEX列,如图6.6所示。(3)在【修改索引】对话框中切换到【存储】选项卡,设置最小保留簇数为10,下次分配簇数为50,如图6.7所示。单击【确定】按钮,该索引修改成功。图6.6修改【索引列】对话框图6.7【存储】界面(六)修改索引1.使用DM管理工具Manager修改索引【提示】1.如果想要在Manager工具中修改索引的名称,直接用鼠标右键单击该索引,在弹出的快捷菜单中选择【重命名(O)】命令,在弹出的【重命名】对话框中输入新的索引名称即可。2.如果要设置某个索引的失效、重建、不可见等功能,都可以在Manager工具中用鼠标右键单击该索引,然后在弹出的快捷菜单中选择相应的命令执行即可。(六)修改索引2.使用ALTERINDEX语句修改索引语法格式:ALTERINDEX[<模式名>.]<索引名>RENAMETO[<模式名>.]<索引名>|INVISIBLE|VISIBLE|UNUSABLE|<MONITORING|NOMONITORING>USAGE;参数说明:(1)模式名:索引所属的模式名,缺省为当前模式;(2)索引名:索引的名称;(3)INVISIBLE|VISIBLE:INVISIBLE表示查询语句的执行计划不会使用该索引,VISIBLE表示会生成索引相关的计划。默认为VISIBLE。(4)UNUSABLE:将索引设置为无效状态,系统将不再维护此索引。(5)MONITORINGUSAGE:对指定索引进行监控;NOMONITORINGUSAGE:对指定索引取消监控(六)修改索引【例6.3】为STUDENT表的INDEX_SNAME索引修改名称为IDX_SNAME。ALTERINDEXINDEX_SNAMERENAMETOIDX_SNAME;【例6.4】将STUDENT表的IDX_SNAME索引设置失效。ALTERINDEXIDX_SNAMEUNUSABLE;(七)删除索引1.使用DM管理工具Manager删除索引删除GRADEM模式中STUDENT表的索引IDX_SNAME,操作步骤如下。(1)启动DM管理工具Manager,并建立与数据库的连接。在【对象导航】窗格中依次展开【LOCALHOST】|【模式】|【GRADEM】|【表】|【STUDENT】|【索引】选项,用鼠标右键单击【IDX_SNAME】节点,从弹出的快捷菜单中选择【删除(D)】选项,如图6.8所示。(2)在弹出的【删除对象】对话框中单击【确定】按钮,确认要删除该索引,即可完成对该索引的删除操作,如图6.9所示。图6.8【删除】选项
图6.9【删除对象】对话框(七)删除索引2.使用DM_SQL语句删除索引使用DM_SQL的DROPINDEX语句可删除索引,语法格式如下。DROPINDEX[IFEXISTS][<模式名>.]<索引名>;【例6.5】将STUDENT表的IDX_SNAME索引删除。DROPINDEXIFEXISTSGRADEM.IDX_SNAME;【任务实施】针对【任务提出】中的问题,王宁使用DM_SQL语句创建索引来解决,具体实现代码如下。(1)使用CREATEINDEX语句创建索引。CREATEUNIQUEINDEXid_snoONstudent_new(sno);(2)使用WHERE语句查询sno=1000000的记录,观察查询时间。SELECT*FROMstudent_newWHEREsno=1000000;通过观察返回的查询时间,可以看出在SNO字段上创建索引,可以大大提升查询速度。使用视图优化查询性能任务6-2【任务提出】王宁已经能够熟练使用多表连接查询实现“查询20200101班选修‘高等数学’课程且成绩在80~90分的学生姓名、学号、班级号及成绩”。但是他发现,频繁用到这段代码的时候需要重写代码、重新编译、重新执行,这种实现方式存在着代码复用性差、效率低等缺点。王宁需要创建视图来解决这些问题。(一)视图概述视图是从一个或者几个基表中导出的虚拟表,是从现有基表中抽取若干子集组成的用户“专用表”,这种构造方式必须使用SELECT语句实现。在定义一个视图时,只把其定义存放在数据库中,并不直接存储视图对应的数据,直到用户使用视图时,才执行其对应的查询语句,查找对应的数据。(一)视图概述使用视图具有如下优点。简化对数据的操作。自定义数据。数据集中显示。导入和导出数据。合并分割数据。安全机制。(二)使用DM管理工具Manager创建视图为gradem数据库创建一个视图view_stud,要求连接student表、sc表和course表,视图内容包括所有男生的sno、sname、ssex、cname和degree。操作步骤如下。(1)启动DM管理工具Manager,并建立与数据库的连接。(2)在【对象导航】窗格中依次展开【LOCALHOST】|【模式】|【GRADEM】|【视图】选项,用鼠标右键单击【视图】节点,从快捷菜单中选择【新建视图(N)...】选项,如图6.10所示。(3)分别在【新建视图】对话框中确定【模式名】【视图名】信息,然后在右下方窗格中完善创建视图的SELECT语句,如图6.11所示。图6.10
【新建视图】选项
图6.11
【新建视图】对话框(二)使用DM管理工具Manager创建视图(4)编辑完成后,单击【确定】按钮,即可完成该视图的创建操作。此时,我们可以在【视图】选项中看到新创建的视图VIEW_STUD,如图6.12所示。图6.12
创建完成的视图VIEW_STUD
图6.13
【查询设计】对话框【提示】也可以在【新建视图】窗口中选择【查询设计器】,然后在【查询设计】窗口中依次确定【目标对象】--STUDENT、COURSE、SC表,【导出列】--SNO、SNAME、SSEX、CNAME、DEGREE,【条件列】--STUDENT.SSEX=‘男’,如图6.13所示,然后单击【确定】按钮,即可完成该视图的创建。(三)使用CREATEVIEW语句创建视图在DM_SQL中,CREATEVIEW语句的语法格式如下。CREATE[ORREPLACE]VIEW[模式名.]<视图名>[(列名[,列名]…)]AS<查询表达式>[WITH[CASCADED|LOCAL]CHECKOPTION]|[WITHREADONLY];(三)使用CREATEVIEW语句创建视图(1)ORREPLACE:如果要创建的视图已存在,则替换它,如果不存在,则创建该视图。(2)<模式名>:指明被创建的视图属于哪个模式,缺省为当前模式。(3)<视图名>:指明被创建的视图名称,其命名规则与标识符的相同,并且要保证在一个模式中是唯一的,该参数不能省略。(4)<列名>:声明视图中使用的字段名。(5)<查询表达式>:定义视图的SELECT语句。(6)WITHCHECKOPTION:该选项用于可更新视图中,强制所有通过视图修改的数据必须满足<查询表达式>语句中指定的选择条件。(7)CASCADED|LOCAL:用于当前视图是根据另一个视图定义的情况。当通过视图向基表中更新数据时,指定LOCAL,要求数据必须满足当前视图定义中<查询表达式>所指定的条件;指定CASCADED,数据必须满足当前视图,以及所有相关视图定义中<查询表达式>所指定的条件。默认为CASCADED。(8)WITHREADONLY:指明该视图是只读视图,只可以查询,不可以做其他DML操作。参数说明:(三)使用CREATEVIEW语句创建视图CREATEVIEWv_studentASSELECTA.sno,sname,cname,degreeFROMstudentA,courseB,scCWHEREA.sno=C.snoANDB.cno=C.cnoANDcname='数据库原理及应用';【例6.6】有条件的视图定义。定义视图v_student,查询所有选修“数据库原理及应用”课程的学生的学号(sno)、姓名(sname)、课程名(cname)和成绩(degree)。【注意】视图定义后,可以像查询基表一样查询视图。(四)视图的使用视图的使用主要包括视图的检索,以及通过视图对基表进行插入、修改、删除操作,也可以在视图之上再建新视图。视图的检索几乎没有什么限制,但是由于对视图的数据更新最终都会转换为对其基表的操作。所以,通过视图对数据的插入、修改、删除操作则有一定的限制条件。(四)视图的使用视图的查询总是转换为对它所依赖的基表的等价查询。利用DM_SQL的SELECT语句和Manager工具都可以查询视图,方法与基表的查询完全一样。1.使用视图查询数据视图也可以使用INSERT语句、UPDATE语句、DELETE语句实现数据的插入、修改或删除。相应语句的使用方法与在基本表的使用方法相同。执行INSERT语句、UPDATE语句、DELETE语句时,实际上是向视图所引用的基本表进行数据的插入、修改和删除操作。2.通过视图修改数据(四)视图的使用--创建视图v1_STUDENTCREATEVIEWV1_studentASSELECTsno,sname,CLASSNOFROMstudent;--插入记录INSERTINTOV1_student(sno,sname,classno)VALUES('2024020301','王小龙','20240203');--查看结果SELECTsno,sname,ssex,CLASSNOFROMstudent;【例6.7】创建一个包含所有学生的学号、姓名、班级号信息的视图V1_STUDENT,并利用视图向STUDENT表中插入一行数据('2024020301','王小龙','20240203')。(四)视图的使用DELETEFROMV1_studentWHEREsname='王小龙';【例6.8】将例6.7中插入的数据删除。【提示】如果视图中有下面所述属性,则插入、更新或删除操作将失败。(1)视图定义中的FROM子句包含两个或多个表,且SELECT选择列表达式中的列包含来自多个表的列。(2)视图的列是由集合函数派生的。(3)视图中的SELECT语句包含GROUPBY子句或DISTINCT选项。(4)视图的列是从常量或表达式派生的。(五)视图的修改修改我们前面创建的视图view_stud,要求连接student表、sc表和course表,视图内容包括软件工程系的男生的sno、sname、cname和degree。操作步骤如下。(1)启动DM管理工具Manager,并建立与数据库的连接。在【对象导航】窗格中依次展开【LOCALHOST】|【模式】|【GRADEM】|【视图】选项,选中要修改的视图VIEW_STUD,用鼠标右键单击该节点,从快捷菜单中选择【修改(M)...】选项,如图6.15所示。(2)在【修改视图】对话框下方文本框中修改创建视图的SELECT语句,如图6.16所示。(3)编辑完成后,单击【确定】按钮,即可完成该视图的修改操作。1.使用DM管理工具Manager修改视图图6.15【修改】选项图6.16修改视图对话框【提示】也可以在【修改视图】窗口中选择【查询设计器】,然后在【查询设计】窗口中依次确定【目标对象】、【导出列】、【条件列】,完成该视图的修改。具体操作与创建视图类似。(五)视图的修改在DM_SQL语句中,仍然使用CREATEORREPLACEVIEW语句修改视图。2.使用DM_SQL语句修改视图CREATEORREPLACEVIEWV1_studentASSELECTsno,snameFROMstudent;【例6.9】修改例6.7中的视图V1_STUDENT,显示所有学生的学号、姓名。(六)删除视图删除我们前面创建的视图V1_STUDENT,操作步骤如下。((1)启动DM管理工具Manager,并建立与数据库的连接。在【对象导航】窗格中依次展开【LOCALHOST】|【模式】|【GRADEM】|【视图】选项,选中要删除的视图V1_STUDENT,用鼠标右键单击该视图节点,从快捷菜单中选择【删除(D)...】选项,如图6.17所示。(2)在弹出的【删除对象】对话框中选中V1_STUDENT视图,如图6.18所示。单击【确定】按钮,即可完成该视图的删除操作。1.使用DM管理工具Manager删除视图图6.17【删除】选项图6.18【删除对象】对话框(六)删除视图语法格式如下。DROPVIEW[IFEXISTS][<模式名>.]<视图名>[RESTRICT|CASCADE];2.使用DROPVIEW语句删除视图参数说明。(1)<模式名>:指明被删除的视图属于哪个模式,缺省为当前模式。(2)<视图名>:指明被删除的视图名称。(3)IFEXISTS:如不加该参数,在删除一个不存在的视图时会报错。使用它可以防止发生编译错误,提高程序的健壮性。(4)RESTRICT|CASCADE:两种删除视图的方式,其中RESTRICT为缺省值。
当设置DM.INI中的参数DROP_CASCADE_VIEW值为1时,如果在该视图上建有其它视图,必须使用CASCADE参数才可以删除所有建立在该视图上的视图,否则删除视图的操作不会成功;
当设置DM.INI中的参数DROP_CASCADE_VIEW值为0时,RESTRICT和CASCADE方式都会成功,且只会删除当前视图,不会删除建立在该视图上的视图;(六)删除视图DROPVIEWV1_STUDENT;【例6.10】
删除视图V1_STUDENT。【提示】(1)删除视图时,将从系统目录中删除视图的定义和有关视图的其他信息,还将删除视图的所有权限。(2)使用DROPTABLE命令删除表时,必须先用DROPVIEW命令删除基于该表创建的视图,否则会导致视图不可用。【任务实施】针对【任务提出】中的问题,王宁使用DM_SQL语句创建视图来解决,具体实现代码如下。(1)使用CREATEVIEW语句创建视图。CREATEVIEWview_stuandscASSELECTsname,a.sno,classno,degreeFROMstudenta,scb,coursecWHEREa.sno=b.snoANDo=oANDclassno='20200101'ANDcname='高等数学'ANDdegreeBETWEEN80AND90;(2)使用SELECT语句查询VIEW_STUANDSC。SELECT*FROMVIEW_STUANDSC;任务6-3使用物化视图优化查询性能【任务提出】王宁已经能够熟练创建视图,并能灵活使用视图,但是王宁在做“汇总各个班级中不及格的学生人数和学生人次”时有了新的疑问——在不同的学期,各个班级中不及格的学生人数和学生人次是不相同的,如果能够保留每个学期的相关数据,是不是更方便优化查询性能呢?李老师告诉王宁,可以用物化视图实现。我们将带领王宁一起学习物化视图的相关知识,帮助王宁解疑答惑。(一)物化视图概述物化视图(MATERIALIZEDVIEW)是目标表在特定时间上的一个副本,通过查询语句从现有表中构建出来,并将查询出来的数据存储在数据库中。当所依赖的一个或多个基表中的数据发生更新时,物化视图所存储的数据将变得陈旧,用户必须启用刷新机制,通过手动刷新或自动刷新来对数据进行同步。(一)物化视图概述使用物化视图具有如下优点。(1)减少查询时间。物化视图将复杂的查询结果预先计算并存储起来,当执行相同或类似查询时,可以直接从物化视图中读取数据,而无需再次执行复杂的查询逻辑,从而显著提高查询响应速度,提高查询性能。(2)减少数据库负载。通过物化视图,原本需要数据库即时处理的复杂查询被转移到了物化视图的创建和维护过程中,从而减轻了数据库在查询时的负载。(3)保持数据同步。物化视图支持多种刷新策略,可根据业务需要和数据变化频率选择合适的刷新策略,以确保物化视图中的数据与基表数据保持同步。(4)实现数据复制。通过在不同节点上创建物化视图,可以实现数据的分布式存储和访问,提高数据的可用性和容错性。(5)支持创建索引。物化视图上也可以创建索引,进一步提高查询速度。(二)使用DM管理工具Manager创建物化视图为gradem数据库创建一个物化视图view_DEGREE,要求连接student表、sc表和course表,统计每个学生的平均分,要求显示sno、sname、ssex、AVG_degree。操作步骤如下。(1)启动DM管理工具Manager,并建立与数据库的连接。在【对象导航】窗格中依次展开【LOCALHOST】|【模式】|【GRADEM】|【物化视图】选项,用鼠标右键单击【物化视图】选项,从快捷菜单中选择【新建物化视图(N)...】选项,如图6.19所示。(2)分别在【新建物化视图】对话框中确定【模式名】【视图名】信息,然后在右下方窗格中完善创建视图的SELECT语句,如图6.20所示。图6.19
【新建物化视图】选项
图6.20
【新建物化视图】窗口(二)使用DM管理工具Manager创建物化视图(3)切换到【刷新】选项卡,分别设置BUILD选项、QUERY选项、REFRESH选项、刷新时机、刷新规则等信息,如图6.21所示。(4)切换到【存储】选项卡,分别设置表空间、初始分配簇数、下次分配簇数、最小分配簇数等信息,如图6.22所示。(5)编辑完成后,单击【确定】按钮,即可完成该物化视图的创建操作。此时,我们可以在【物化视图】选项中看到新创建的视图VIEW_DEGREE,如图6.23所示。图6.21
【刷新】选项卡
图6.23
创建完成的物化视图VIEW_DEGREE图6.22
【存储】选项卡(三)使用CREATEMATERIALIZEDVIEW语句创建物化视图在DM_SQL中,使用CREATEMATERIALIZEDVIEW语句创建物化视图,其语法格式如下。CREATEMATERIALIZEDVIEW[模式名.]<物化视图名>[(列名[,列名]…)][BUILDIMMEDIATE|BUILDDEFERRED][TABLESPACE<表空间名>][<STORAGE子句>][<物化视图刷新选项>][<查询改写选项>]AS<查询表达式>;(1)<模式名>:指明被创建的物化视图属于哪个模式,缺省为当前模式。(2)<物化视图名>:指明被创建的物化视图名称。(3)<列名>:声明物化视图中使用的字段名。(4)[BUILDIMMEDIATE|BUILDDEFERRED]指明BUILDIMMEDIATE为立即填充数据;BUILDDEFERRED为延迟填充,使用这种方式要求第一次刷新必须为COMPLETE完全刷新。默认为立即填充。(5)<表空间名>:指明被创建的物化视图属于哪个表空间。(6)<STORAGE子句>::=STORAGE(<STORAGE项>[,<STORAGE项>[,...]])<STORAGE项>::=[INITIAL<初始簇数目>]|[NEXT<下次分配簇数目>]|[MINEXTENTS<最小保留簇数目>]|[ON<表空间名>]|[FILLFACTOR<填充比例>]参数说明:(三)使用CREATEMATERIALIZEDVIEW语句创建物化视图(7)<物化视图刷新选项>::=REFRESH<刷新选项>{<刷新选项>}|NEVERREFRESH<刷新选项>::=[<刷新方法>][<刷新时机>][<刷新规则>]<刷新方法>::=FAST|COMPLETE|FORCE
FAST:根据相关表上的数据更改记录进行增量刷新。普通DML操作生成的记录存在于物化视图日志,在使用FAST刷新之前,必须先建好物化视图日志。
COMPLETE:通过执行物化视图的定义进行完全刷新。
FORCE:默认选项。当快速刷新可用时采用快速刷新,否则采用完全刷新。<刷新时机>::=[ONDEMAND|ONCOMMIT][STARTWITHdatetime_expr|NEXTdatetime_expr]
ONDEMAND:由用户通过REFRESH语法进行手动刷新。如果指定了STARTWITH和NEXT子句就没有必要指定ONDEMAND。ONCOMMIT:在相关表上事务提交时进行快速刷新。STARTWITHdatetime_expr|NEXTdatetime_exprSTARTWITH用于指定首次刷新物化视图的时间;NEXT指定自动刷新的间隔,如果省略,则物化视图只会刷新一次;
参数说明:(三)使用CREATEMATERIALIZEDVIEW语句创建物化视图<刷新规则>::=WITHPRIMARYKEY|WITHROWID
WITHPRIMARYKEY
默认选项。只能基于单表。若显式指定刷新方法为FAST,则必须含有PRIMARYKEY约束,此时选择列必须直接含有所有的PRIMARYKEY(UPPER(col_name)的形式不可接受)。
WITHROWID
只能基于单表,如果使用WITHROWID的同时使用快速刷新,则必须将ROWID提取出来,和其他列名一起,以别名的形式显示。NEVERREFRESH:物化视图从不进行刷新。(8)<查询改写选项>::=[DISABLE|ENABLE]QUERYREWRITEDISABLE:禁止物化视图用于查询改写。ENABLE:允许物化视图用于查询改写。
目前DM8仅语法支持查询改写选项,实际功能未实现。(9)<查询表达式>:定义视图的SELECT语句。参数说明:(三)使用CREATEMATERIALIZEDVIEW语句创建物化视图CREATEMATERIALIZEDVIEWvIEW_studentREFRESHONDEMANDASSELECTA.sno学号,sname姓名,MAX(degree)最高分,MIN(degree)最低分FROMstudentA,SCBWHEREA.sno=B.snoGROUPBYA.SNO,sname;【例6.11】定义物化视图vIEW_student,汇总每个学生的平均分,并手动刷新。要求包括每个学生的学号(sno)、姓名(sname)、最高分(MAX_degree)、最低分(MIN_degree)。【提示】1.物化视图只允许查询操作,不能直接对物化视图进行插入、修改及删除操作。2.对物化视图数据的修改只能通过刷新物化视图语句进行。(三)使用CREATEMATERIALIZEDVIEW语句创建物化视图(四)物化视图的修改修改我们前面创建的物化视图view_DEGREE,要求将REFRESH选项改为NEVERREFRESH。操作步骤如下。(1)启动DM管理工具Manager,并建立与数据库的连接。在【对象导航】窗格中依次展开【LOCALHOST】|【模式】|【GRADEM】|【物化视图】选项,选中要修改的物化视图VIEW_DEGREE,用鼠标右键单击该选项,从快捷菜单中选择【修改(M)...】选项,如图6.24所示。(2)在弹出的【修改物化视图】对话框中切换到【刷新】选项卡,修改REFRESH选项即可,如图6.25所示。(3)修改完成后,点击【确定】按钮,即可完成该物化视图的修改操作。1.使用DM管理工具Manager修改物化视图图6.24【修改】选项图6.25【刷新】选项卡(四)物化视图的修改在DM_SQL语句中,可以使用ALTERMATERIALIZEDVIEW语句修改物化视图。语法格式如下:ALTERMATERIALIZEDVIEW[<模式名>.]<物化视图名>[<物化视图刷新选项>][<查询改写选项>]其中,<物化视图刷新选项>和<查询改写选项>与CREATEMATERIALIZEDVIEW语句中的参数相同。2.使用DM_SQL语句修改物化视图altermaterializedviewGRADEM.VIEW_STUDENTneverrefreshenablequeryrewrite;【例6.12】修改例6.11中的物化视图VIEW_STUDENT,要求从不进行刷新,且允许用于查询改写。(五)物化视图的删除删除我们前面创建的物化视图VIEW_DEGREE,操作步骤如下。((1)启动DM管理工具Manager,并建立与数据库的连接。在【对象导航】窗格中依次展开【LOCALHOST】|【模式】|【GRADEM】|【物化视图】选项,选中要删除的视图VIEW_DEGREE,右击该物化视图,从快捷菜单中选择【删除(D)...】选项,如图6.26所示。(2)在弹出的【删除对象】对话框中选中VIEW_DEGREE视图,如图6.27所示。单击【确定】按钮,即可完成该物化视图的删除操作。1.使用DM管理工具Manager删除物化视图图6.26【删除】命令图6.27【删除对象】对话框(五)物化视图的删除语法格式如下。DROPmaterializedVIEW[IFEXISTS][<模式名>.]<物化视图名>;2.使用DROPmaterializedVIEW语句删除视图参数说明。(1)<模式名>:指明被删除的物化视图属于哪个模式,缺省为当前模式。(2)<物化视图名>:指明被删除的物化视图名称。(3)IFEXISTS:如不加该参数,在删除一个不存在的视图时会报错。使用它可以防止发生编译错误,从而提高程序的健壮性。DROPmaterializedVIEWIFEXISTSGRADEM.VIEW_student;【例6.13】
删除物化视图VIEW_student。(六)物化视图的刷新在Manager管理工具中刷新我们前面创建的视图VIEW_STUDENT,操作步骤如下。(1)启动DM管理工具Manager,并建立与数据库的连接。在【对象导航】窗格中依次展开【LOCALHOST】|【模式】|【GRADEM】|【物化视图】选项,选中要刷新的物化视图VIEW_STUDENT,右击该物化视图,从快捷菜单中选择【更新(U)】选项,如图6.28所示。(2)在弹出的【物化视图刷新】对话框中可以修改刷新类型,如图6.29所示。单击【确定】按钮,即可完成该物化视图的删除操作。1.使用DM管理工具Manager刷新物化视图图6.28【更新】选项图6.29【物化视图刷新】对话框(六)物化视图的刷新语法格式如下。
REFRESHMATERIALIZEDVIEW[<模式名>.]<物化视图名>[FAST|COMPLETE|FORCE]2.使用REFRESHmaterializedVIEW语句刷新物化视图(七)物化视图日志在Manager管理工具中创建基于STUDENT表的物化视图日志,操作步骤如下。(1)启动DM管理工具Manager,并建立与数据库的连接。在【对象导航】窗格中展开【LOCALHOST】节点,依次单击【模式】|【GRADEM】|【物化视图】|【日志表】选项,右击该选项,从快捷菜单中选择【新建日志表(N)】选项,如图6.30所示。(2)在弹出的【新建物化视图日志表】对话框中的【常规】选项卡中分别设置【模式名】、【表名】、【WITH选项】、【PURGE选项】等,如图6.31所示。1.使用DM管理工具Manager新建物化视图日志图6.30【新建日志表】选项图6.31【新建物化视图日志表】对话框(七)物化视图日志在Manager管理工具中创建基于STUDENT表的物化视图日志,操作步骤如下。(3)切换到【存储】选项卡,可分别设置表空间、初始分配簇数、下次分配簇数、最小分配簇数等信息,操作方法同创建物化视图中的操作步骤。(4)单击【确定】按钮,即可完成该物化视图日志表的创建操作,在Manager管理工具中可以看到该日志表MLOG$_STUDENT,如图6.32所示。1.使用DM管理工具Manager新建物化视图日志图6.32创建完成的日志表(七)物化视图日志语法格式如下。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年广西工商职业技术学院单招综合素质考试题库及完整答案详解1套
- 2026年阳光学院单招职业倾向性考试题库及参考答案详解一套
- 2026年濮阳职业技术学院单招职业技能测试题库及参考答案详解1套
- 2026年山西省阳泉市单招职业适应性考试题库含答案详解
- 2026年广东工贸职业技术学院单招职业倾向性考试题库及参考答案详解一套
- 2026年攀枝花攀西职业学院单招职业技能考试题库参考答案详解
- 2026年巴音郭楞职业技术学院单招综合素质考试题库附答案详解
- 2026年贵州工贸职业学院单招职业技能考试题库及参考答案详解一套
- 2026年辽宁机电职业技术学院单招职业适应性考试题库参考答案详解
- 2026年广西卫生职业技术学院单招职业适应性考试题库及答案详解一套
- 2022年9月国家开放大学专科《高等数学基础》期末纸质考试试题及答案
- 2023-2024学年广东省广州市荔湾区九年级(上)期末数学试卷(含答案)
- JJF(陕) 042-2020 冲击试样缺口投影仪校准规范
- T-CFA 030501-2020 铸造企业生产能力核算方法
- JBT 8127-2011 内燃机 燃油加热器
- MOOC 西方园林历史与艺术-北京林业大学 中国大学慕课答案
- 混凝土缓凝剂-标准
- 年生产一亿粒阿莫西林胶囊(0.25)
- 危重患者的早期识别
- 环泊酚注射液-临床用药解读
- 老年人护理需求评估表
评论
0/150
提交评论