高级SQL优化

jengd 2012-12-10 03:47:37
加精
贴不上图,请http://sishuok.com/forum/blogPost/list/6414.html

充分利用索引
索引的限制
1. 索引对不等号和NOT的限制
如果WHERE条件中出现!=或者<>,即使该列建立了索引,则该索引也不会被使用;如果不恰当的使用了NOT,则索引也不会被使用。
Oracle 10g起,在基于CBO的优化器模式下Oralce会进行自动优化,但在基于RBO(基于规则)的优化器模式下,依然保持此规则。


1. 索引对不等号和NOT的限制
RBO模式下,执行计划如下:

1. 索引对不等号和NOT的限制
RBO模式下,执行情况如下:


此时使用变通写法的耗费为:0.407/2.187=1.60%!
1. 索引对不等号和NOT的限制
CBO模式下,执行情况如下:


此时使用变通写法的耗费节约不到0.03秒,但依然更优,故此推荐此种变通写法,再看此时使用NOT:
1. 索引对不等号和NOT的限制
CBO模式下,在JYJE列的索引上使用NOT:

为使用<>的:0.156/0.329=47.42%!为变通写法的使用0.156/0.297=52.53%! 因 此这种写法最优!

1. 索引对不等号和NOT的限制
一般,WHERE条件中,如果索引列是字符列,使用NOT往往也不会使用索引:

结论:如果索引列是数字,则对于不等号的处理可以变更为NOT的方式或者(大于 OR 小于)的方式① ;对于确实无法不使用不等号的方式,可以使用默认值② ;如果可以建立位图索引则使用位图索引③ ;否则可以考虑使用分区等方法进行优化④ ,具体是情况而定。
2. 索引对IS NULL的限制
一般来说,如果WHERE子句基于的列是可空的列,且其建立了索引,如果使用了IS NULL,由于NULL的列本身不包含在索引中,因此无法利用索引。
所以一般对要建立索引的列不要设置为可空,如果确实含有空值,建议使用默认值代替空值,具体参见前面章节“SQL优化技巧”部分的“使用默认值”。

3. 索引对函数的限制
基于索引IDX_BIGTAB_OBJECTNAME,执行情况如下:


执行计划情况如下:

这是因为该索引是常规b-tree索引,对该列在WHERE子句中使用了函数,则不能使用索引。因此,对在WHERE子句中经常要使用函数时,应该建立基于函数的索引,且 只有当查询语句包含该函数或者表达式时,基于函数的索引才会被调 用。详情请参见索引部分的理论讲解!

创建并使用函数索引:



创建并使用函数索引:

此时使用基于函数的索引效率是原来的2.782/0.188=14.78!呗!
4. 索引对不匹配数据类型的限制
先看执行情况:

不匹配的类型执行的时间是匹配的类型的 2.187/0.266=8.2 倍!

再看执行计划:

原因分析:
因为ACCOUNT_TRADE表的字段YKKH是CHAR,因此在对其指定的值是数字时,Oracle虽然能隐式的执行数字和字符的转换,但不会调用其索引。而当对其指定是字符时,则不存在此问题,索引可以调用。
注意:因为数据类型的不匹配和Oracle对数据类型的隐式转换,此种类型的低效代码在任何项目中均可能因为大意而存在,因此建议开发人员和管理人员要定期抽查相应的代码,以杜绝此类低效代码!
索引类型总结
类型
,描述
b-tree索引
最常最多使用的索引,其树结构与二叉树比较类似,根据ROWID快速定位所访问的行
bitmap索引
使用位图来管理与数据行的对应关系,适用于基数比较少的列
降序索引
降序索引在叶子节点中的存储从左到右是按照从大到小排序的;一般是针对逆向排序较多的查询时才使用该类型索引
函数索引
针对要频繁对列使用函数的索引,只有当查询语句包含该函数或者表达式时,基于函数的索引才会被调用
反转索引
反转了b*tree索引码中的字节,使索引条目分配更均匀,多用于并行服务器环境下,用于减少索引的竞争
分区索引
分区表的索引,又包括本地分区索引(本地前缀分区索引和本地非前缀分区索引)和全局索引,一般建议使用本地分区索引,因其与基表具有良好的数据均衡性和可维护性


访问路径
1. 全表扫描
全表扫描(FULL TABLE SCANS)时所有行、所有数据块均会被读到,是 效率最 低的一种,一般会在表 缺少索引、 读取大量数据、 访问小表或 高并发时发生。


2. ROWID扫描
ROWID扫描(ROWID SCANS)是通过ROWID中数据文件和块位置访问数据行。一般作为访问索引后的第二步,如果访问的列全部包含在索引中,则不会执行ROWID扫描。

作为索引访问后的第二步:

访问的列全部在索引中不再执行ROWID扫描

3. 索引扫描
索引扫描(INDEX SCANS)包含全索引扫描(full index scan、FIS)、快速全索引扫描(fast full index scan、FFIS)、索引范围扫描(index range scan)、索引唯一扫描 (index unique scan)、索引跳跃式扫描 (index skip scan)、位图索引扫描(bitmap index scan), 其中前5种在本系列课程的索引章 节部分已经讲解了其理论和示例。位图索引示例如下:

3. 索引扫描
类型
方式
发生条件
1.FULL INDEX SCANS
逐一读取索引中的所有块,由于索引中数据已按索引键排序,因此会忽略掉排序
1.ORDER BY中的列全部在该索引中时
2.ORDER BY中列的顺序满足索引中前导列的顺序时
3.使用GROUP BY且该子句中的列在索引中时
2.FAST FULL INDEX SCANS
只扫描索引中的数据,不会扫描表中的数据;由于索引中数据未按索引键排序,因此不能忽略掉排序
当同时满足下列条件是,Oracle用FFIS替代FIS:
1.查询的所有列均包含在索引中
2.索引中的列至少一个具有not null约束
3.INDEX RANGE SCANS
访问选择性数据最常用的扫描方式;按顺序的对某个索引进行扫描,返回数据是升序排列的,可以使用唯一索引和非唯一索引;如果对索引列使用ORDER BY/GROUP BY则可省略排序
1.在唯一索引上使用范围操作符(>、<、>=、<=、<>、BETWEEN)
2.在组合索引上使用部分列进行查询,导致查出多行
4.INDEX UNIQUE SCANS
扫描唯一索引或主键,要么返回一行数据要么返回0行数据
1.当使用唯一索引时
2.当使用主键时
5.INDEX SKIP SCANS
其实质是将索引分解成多个小的子索引来提高效率,系从9i开始引入
复合索引中前导列的取值是枚举的从而可以分拆为多个子索引,并且查询条件中不含前导列时

为了 加深巩固前面的知识,本处对前五种索引扫描复习总结如下:
(1).全索引扫描
逐一读取索引中的所有块,由于索引中数据已按索引键排序,因此会忽略掉排序,可能发生的情况如下:
A. ORDER BY中的列全部在某个索引中
全部在某个索引中:

(1).全索引扫描
B. ORDER BY中列的顺序满足索引中前导列的顺序时
下面分别是满足和不满足前导列顺序时:

C. 使用GROUP BY且该子句中的列在索引中时

(2).快速全索引扫描
只扫描索引中的数据,不会扫描表中的数据;由于索引中数据未按索引键排序,因此不能忽略掉排序。当同时满足下列条件时,Oracle用FFIS替代FIS或FTS:
1.查询的所有列均包含在索引中
2.索引中的列至少一个具有not null约束(10g开始的,原低版本的系统中为查询的列中不包含任何null值)

全部列均在索引中:


有列不在索引中:

删除该索引,创建新索引,两个列均为可空:
此时即使全部列在该索引中, 也不会发生FFIS

索引范围扫描是访问选择性数据最常用的扫描方式;按顺序的对某个索引进行扫描,返回数据是升序排列的,可以使用唯一索引和非唯一索引;如果对索引列使用ORDER BY/GROUP BY则可省略排序。
下列情形中会发生索引范围扫描:
A.在唯一索引上使用范围操作符(>、<、>=、<=、<>、BETWEEN)
B.在组合索引上使用部分列进行查询,导致查出多行
示例请参考本系列课程的索引章节部分

(4).索引唯一扫描
当使用主键或唯一索引时发生。 示例请参考本系列课程的索引章节部分。
(5).索引跳跃扫描
复合索引中前导列的取值是枚举的从而可以分拆为多个子索引,并且查询条件中不含前导列时。示例如下:
create table customers as select * from sh.customers;
CREATE INDEX customers_gender_email
ON customers (cust_gender, cust_email);

(5).索引跳跃扫描
没进行表分析前:

进行表分后:
analyze table customers compute statistics;


何时需要索引
一般地,对于从表的总行中的大部分查询只查询不到10%数据(有的称为2%-4%)的表,可以考虑创建索引。一般考虑的索引的原则包括:

l对于经常以查询关键字为基础的表,并且该表中的数据行是均匀分布的
l以查询关键字为基础,表中的数据行随机排序
l表中包含的列数相对比较少(仅仅是相对,需要根据实际情况确定)
l表中的大多数查询都包含相对简单的WHERE子句
l表的记录数比较少的,不建议使用索引,如数据不超过1万行的表不要建立索


为索引选择列和表达式
一般遵循的原则包括:
l经常在WHERE子句中使用的列
lSQL语句中经常用于表之间连接的列
l重复性少(可选择性高)的关键字,如主键
l不宜将经常UPDATE的列作为索引列
l不宜将经常在WHERE子句中使用,但与函数或操作符相结合的列作为索引列
l对于取值较少的列,应考虑建立位图索引,而不应该采用B树索引
l如果经常访问的列上要使用函数,应使用基于函数的索引

本处举例说明取值较少的列使用bitmap索引和b-tree的对比分析,B-tree时:


bitmap时:



使用复合索引
多个列联合起来组成的索引称为复合索引、或联合索引或者组合索引,往往联合索引比单个索引具有更好的性能。创建联合索引一般遵循的原则包括:
l经常在WHERE子句中使用的列且这些列之间使用AND连接
l查询条件可能包括n个列的AND关系,而大多数情况下使用m个列是(n>m),应该考虑复合索引,且n个列为前导列
l某几个列联合起来能够组成唯一索引,应坚决建立联合唯一索引
l复合索引中,建议至少一个不能为null,且如果可能尽量将只是存在null的列对其null值采用其它默认值代替

本处举例说明Where中包含AND时使用多个索引性能低于联合索引的示例,使用多个索引时:



本处举例说明Where中包含AND是使用多个索引性能低于联合索引的示例,使用复合索引时:


结论:
项目
多个索引
复合索引
复合索引是多个索引的
一、执行时间
0.281
0.11
39.15%
二、执行计划

1.总耗费
1658
464
27.99%
2.I/O耗费
1562
462
29.58%
3.时间
19
6
31.58%
可见,此时复合索引是多个索引的效率的 四倍以上!
监视索引的使用情况
u正确合适的索引是查询优化性能的首选
u索引是表的索引列排序后的小型化拷贝,会增加存储开销,因此会带来Insert、Update、Delete的额外开销
u一个表可以有一个索引,也可以有多个索引,往往过多的索引或不恰当的索引带来的负面性能更多
u表索引的设计初衷,往往在40%甚至更高的情况下与最终的实际使用情况不符合,此举视设计人员对业务和Oracle的理解不同而不同
u监视索引的实际使用情况,尤其在表具有多个索引的情况下,就显得尤为重要,对经常不使用的索引采用合并为复合索引或删除是优化的工作之一
示例如下:
1.创建索引


2.启用所以监视

3.执行SQL



4.查看索引使用情况

我们可以根据一个持续时间的对索引的监控结果决定如何合并及删除不恰当的索引。
5.停止监视索引

转载请注明私塾在线【 http://sishuok.com/forum/blogPost/list/6414.html】
...全文
5448 40 打赏 收藏 转发到动态 举报
写回复
用AI写文章
40 条回复
切换为时间正序
请发表友善的回复…
发表回复
nicole_liu 2015-08-31
  • 打赏
  • 举报
回复
学习 学习 很缺乏这方面的知识
蓝色冰眸 2015-08-25
  • 打赏
  • 举报
回复
1024个赞!!
JAVA丶斌 2015-07-10
  • 打赏
  • 举报
回复
内容不错,值得学习。
EX_SoDream 2015-02-09
  • 打赏
  • 举报
回复
先收藏下
不写代码的钦 2015-02-07
  • 打赏
  • 举报
回复
先收藏,然后好好看看。
Ida_25 2015-02-06
  • 打赏
  • 举报
回复
qq_22925943 2014-11-04
  • 打赏
  • 举报
回复
收藏了
丹青妙笔 2014-11-03
  • 打赏
  • 举报
回复
学习了
beyondcj 2014-11-02
  • 打赏
  • 举报
回复
YHL27 2014-10-31
  • 打赏
  • 举报
回复
先收藏,有空再看看。。。,3ks
松鼠一号 2014-10-30
  • 打赏
  • 举报
回复
收藏
LongRui888 2014-10-30
  • 打赏
  • 举报
回复
虽然大部分都知道,但还是感谢楼主的分享
CodeC 2014-10-30
  • 打赏
  • 举报
回复
先留个印象 日后回头想想
twtiqfn 2014-10-30
  • 打赏
  • 举报
回复
这么高深的问题,好难啊感觉
IT男神张全蛋 2014-10-30
  • 打赏
  • 举报
回复
刚刚看了下,确实很有用,正好在研究优化的问题,本文给了大量的启发,非常感谢。
qq_20733459 2014-10-30
  • 打赏
  • 举报
回复
好东西学习了多谢大神分享
qq_22670079 2014-10-29
  • 打赏
  • 举报
回复
wangnaisheng 2014-10-29
  • 打赏
  • 举报
回复
收藏了
tiger_dxc 2014-10-29
  • 打赏
  • 举报
回复
qq_21054147 2014-10-28
  • 打赏
  • 举报
回复
加载更多回复(17)
本书是Inside Microsoft SQL Server 2005系列四本著作中的一本。它详细介绍了T-SQL的内部体系结构,包含了非常全面的编程参考,提供了使用Transact-SQL(T-SQL)的专家级指导,囊括了非常全面的编程参考,揭示了基于集合的查询的强大威力,并包含大量来自专家们的参考和建议。本书适合专业数据库开发者、BI开发者、DBA和以SQL Server作为后台数据库的一般应用程序开发者,读者可以通过书中的最佳实践、高级技巧和代码示例来掌握这门复杂的编程语言,以切合实际的方案来解决复杂的实际问题。   深入理解T-SQL体系结构,充分利用高级T-SQL查询技术。   本书深入介绍了T-SQL的内部体系结构,揭示了基于集合的查询的强大威力,并包含大量来自专家们的参考和建议。通过本书提供的最佳实践和示例代码,数据库开发人员和管理员完全可以掌握这门复杂的编程语言,以切合实际的方案来解决复杂的实际问题。通过本书,你将学习到如何:理解逻辑和物理的查询处理;使用方法论优化查询;在查询中用TOP选项修改数据;用递归逻辑、具体化路径或嵌套集合解决方案查询特殊的数据结构;通过逻辑难题提高你的逻辑能力并掌握查询问题的核心等。   你将学习到如何:   理解逻辑和物理的查询处理;   使用方法论优化查询;   解决关系分区问题;   使用CTE和排名函数简化及优化解决方案;   用各种技术聚合数据,包括附加属性、旋转、直方图和分组因子;   在查询中用TOP选项修改数据;   用递归逻辑、具体化路径或嵌套集合解决方案查询特殊的数据结构;   通过逻辑难题提高你的逻辑能力并掌握查询问题的核心; 内容简介 本书是Inside Microsoft SQL Server 2005系列四本著作中的一本。本书及其续篇——《Microsoft SQL Server 2005技术内幕:T-SQL程序设计》介绍了SQL Server 2005中高级T-SQL查询、查询优化及编程相关的知识。这两本书侧重于解决实践中的常见问题,并讨论了解决这些问题的方法。它们将向你揭示基于集合(set-based)查询的强大威力,并解释为什么它比使用游标的过程化编程(procedural programming)更具优势。同时,它还会教你识别使用基于游标解决方案与基于集合解决方案的优劣。   书中还讲述了其他几种争议较多的构造(camstruct)——如临时表、动态执行、XML和.NET集成——它们在具有强大功能的同时,也具有极大的风险。   本书适合于需要编写或检查T-SQL代码的有经验的T-SQL程序员和数据库专业人员。读者可从中学到大量精湛的技巧,这些技巧会充实您的工具箱和编码技能,并让您顺利地开发出高效的解决方案。 作者简介 Itzik Ben-Gan是Solid Quality Learning的首席导师和创始人。他从1999年开始便一直是SQL Server方面的Microsoft MVP,在世界各地讲授 T-SQL查询、编程和查询优化相关的课程,并提供相关咨询服务。他在SQL Server Magazine和MSDN上发表了多篇文章,并被邀请在许多专题会议上做过报告,包括TechEd、DevWeek、PASS和SQL Server Connections。 目录 序 前言 致谢 引言  本书的组织  系统要求  安装示例数据库  更新  代码示例  本书支持 第1章 逻辑查询处理  逻辑查询处理中的各个阶段   逻辑查询处理阶段简介  Customers/Orders场景下的示例查询  逻辑查询处理步骤详解   步骤1:执行笛卡尔乘积(交叉联接)   步聚2:应用ON筛选器(联接条件)   步骤3:添加外部行(Outer Row)   步骤4:应用WHERE筛选器   步骤5:分组   步骤6:应用CUBE或ROLLUP选项   步骤7:应用HAVING筛选器   步骤8:处理SELECT列表   步骤9:应用DISTINCT子句   步骤10:应用ORDER BY子句   步骤11:应用TOP选项  SQL Server 2005中新的逻辑处理阶段   表运算符   OVER子句   集合操作  结论 第2章 物理查询处理  查询处理期间的数据流  编译   Algebrizer   优化   使用查询计划   更新计划  结论   致谢 第3章 查询优化  本章用到的示例数据  优化方法论   分析实例级的等待   联系等待和队列   确定方案   细化到数据库/文件级别   细化到进程级别   优化索引/查询  查询优化工具   syscacheobjects   清空缓存   动态管理对象   STATISTICS IO   测量查询的运
SQL Server 2005微软官方权威参考手册     是Inside Microsoft SQL Server 2005系列书中的第一本,SQL Server类的顶尖之作   全球公认SQL Server 2005经典著作,囊括大量鲜为人知的技术内幕,大师智慧、专家经验尽览无余。       本系列图书中文版得到了微软总部SQL Server组专家的高度重视,同时也得到了微软中国上海SQL Server全球技术支持中心的高度关注。        本书详细介绍了T-SQL的内部构造,包含了非常全面的编程参考。数据库开发人员和DBA可以通过书中的最佳实践、高级技巧和代码示例来掌握这门复杂的编程语言,以切合实际的方案来解决复杂的问题。本书涵盖了T-SQL程序设计的方方面面,如基于集合的编程技术、日期和时间相关的XML和CLR数据类型的使用、临时对象、T-SQL和CLR用户自定义函数、存储过程、触发器、事务和新的错误处理结构、应用并发模型支持并发用户、使用Service Broker来控制数据库应用程序中的异步处理等。   内容简介 本书是Inside Microsoft SQL Server 2005系列四本著作中的一本。它详细介绍了T-SQL的内部构造,包含了非常全面的编程参考。它提供了使用Transact-SQL(T-SQL)的专家级指导,T-SQL是用于SQL Server的最常见的也是功能最强大的编程语言。该书由Itzik Ben-Gan权威执笔,重点关注语言特性以及它们如何被SQL Server引擎解释和处理。   通过本书,你将深入了解T-SQL的高级用法,包括触发器、用户自定义函数、异常处理等。该书解释并比较了SQL Server 2000和SQL Server 2005在数据库开发相关问题上的解决方案,深入讨论了SQL Server 2005中新增的T-SQL编程特性,包含了大量的代码示例、表示例和逻辑难题以帮助数据库开发人员和管理员理解复杂的逻辑并掌握T-SQL。   本书适合于专业数据库开发者、BI开发者、DBA和以SQL Server作为后台数据库的一般应用程序开发者,读者可以通过书中的最佳实践、高级技巧和代码示例来掌握这门复杂的编程语言,以切合实际的方案来解决复杂的实际问题。 作者简介 Itzik Ben-Gan是Solid Quality Learning的导师和创始人。从1999年开始,他一直是Microsoft SQL Server MVP(最有价值专家),并在全世界已经开展过无数次T-SQL查询、T-SQL优化和编程方面的培训。Itzik是Microsoft SQL Server方面几本著作的作者。他在SQL ServerMagazine和MSDN上发表了许多文章和白皮书。Itzik被邀请在许多会议上做报告,包括TechEd、DevWeek、世界各地的各种SQL用户组、PASS、SQL server Magazine Connections和Solid Quality Learning的会议。 从1992年开始,Itzik就一直致力于涉及各种数据库和计算机系统相关技术的多个课题。除了帮助顾客处理紧迫的要求、修复问题、优化数据库、教学和担任顾问以外,他还帮助开发人员和数据库管理员转变关系/基于集合的理念,改善他们编写代码的性能和可维护性。Itzik擅长T-SQL查询、查询优化、编程和内部原理,此外他还精通其他的数据库领域。1999年,Itzik创立以色列SQL Server和OLAP用户组,一直管理至今。 目录 序 前言 致谢 引言 第1章 数据类型相关的问题,XML和CLR UDT 1.1 DATETIME数据类型 DATETIME的存储格式 时间处理   Datetime相关的查询问题  1.2 与字符相关的问题   模式匹配   区分大小写(Case-Sensitive)的筛选器  1.3 大型对象(Large Object,LOB)   MAX 说明符   BULK行集提供程序  1.4 隐式转换(Implicit Conversion)   标量表达式   筛选表达式  1.5 基于CLR的用户定义类型   UDT理论简介   开发UDT  1.6 XML数据类型   关系数据库中的XML支持   什么时候应该使用XML代替关系表现形式?   数据库中的XML序列化对象   使用开放架构(Open Schema)的XML   作为存储过程参数的XML数据类型   Xquery修改语句  1.7 结论 第2章 临时表和表变量  2.1 临时表   局部临时表   全局临时表  2.2 表变量   限制条件   tempdb   范围和可见性   事务上下文   统计信息  2.3 tempdb相关的注意事项  2.4 表表达式  2.5 比较临时对象  2.6 综合练习——关系分区(Relational Division)  2.7 结论 第3章 游标  3.1 使用游标  3.2 游标开销  3.3 单独处理每一行  3.4 按顺序访问   自定义聚合   连续聚合   最大并发会话   匹配问题  3.5 结论 第4章 动态SQL 第5章 视图 第6章 用户定义函数 第7章 存储过程 第8章 触发器 第9章 事务 第10章 错误处理 第11章 Service Broker 附录A CLR程序指南 A.1 创建CLRUtilities数据库: SQL Server A.2 部署:Visual Studio A.3 部署和测试:Visual Studio 和 SQL Server 索引 中英文术语对照表
第一篇 Oracle管理配置 第1章 Oracle安装配置(教学视频:10分钟) 23 1.1 Oracle简介 23 1.1.1 数据库术语 23 1.1.2 主流数据库简介 24 1.1.3 Oracle数据库的特点 24 1.2 安装Oracle数据库 25 1.2.1 Oracle数据库的版本变迁及安装环境 25 1.2.2 安装过程 26 1.2.3 安装中需要注意的问题 27 1.3 本章小结 28 1.4 习题 28 第2章 Oracle常用工具(教学视频:7分钟) 29 2.1 Net Configuration Assistant(网络配置助手) 29 2.1.1 监听程序配置 29 2.1.2 命名方法配置 31 2.1.3 本地Net服务名配置 32 2.2 Net Manager(网络管理员) 34 2.3 本章实例 36 2.4 本章小结 38 2.5 习题 38 第3章 SQL Plus和PL/SQL(教学视频:11分钟) 39 3.1 SQL Plus与PL/SQL简介 39 3.2 使用SQL Plus 40 3.2.1 登录SQL Plus 40 3.2.2 SQL Plus输出结果的格式化 41 3.2.3 SQL Plus小结 46 3.3 PL/SQL 46 3.3.1 PL/SQL常用开发工具 46 3.3.2 开发一个简单的PL/SQL程序 48 3.4 本章实例 49 3.5 本章小结 50 3.6 习题 50 第二篇 Oracle数据库对象 第4章 Oralce数据库(教学视频:15分钟) 51 4.1 创建Oracle数据库 51 4.2 Oracle数据库的相关术语 52 4.2.1 数据库 53 4.2.2 数据库实例和SID 53 4.2.3 ORACLE_SID 54 4.3 Oracle数据库的备份与恢复 55 4.3.1 逻辑备份/恢复(导出/导入) 55 4.3.2 物理备份/恢复 56 4.3.3 利用PL/SQL Developer备份数据库 60 4.4 本章实例 61 4.5 本章小结 61 4.6 习题 62 第5章 Oracle数据表对象(教学视频:42分钟) 63 5.1 Oracle表空间 63 5.1.1 Oracle表空间简介 63 5.1.2 创建Oracle表空间 64 5.1.3 查看表空间 66 5.1.4 修改数据库默认表空间 67 5.1.5 修改表空间名称 68 5.1.6 删除表空间 69 5.2 创建Oracle数据表 70 5.2.1 利用工具创建数据表 70 5.2.2 利用工具查看数据表 71 5.2.3 利用命令创建数据表 72 5.2.4 利用命令查看表结构 72 5.3 修改Oracle数据表结构 73 5.3.1 利用工具修改数据表结构 73 5.3.2 利用命令修改数据表结构 74 5.4 删除数据表 75 5.4.1 利用工具删除数据表 76 5.4.2 利用SQL语句删除数据表 76 5.5 备份/恢复数据表 76 5.5.1 利用工具备份/恢复数据表 77 5.5.2 利用命令备份/恢复数据表 82 5.6 临时表 83 5.6.1 临时表简介 83 5.6.2 会话级临时表 84 5.6.3 事务级临时表 85 5.6.4 查看临时表在数据库中的信息 86 5.6.5 临时表的应用场景 86 5.7 特殊的表dual 87 5.7.1 分析dual表 87 5.7.2 dual表的应用场景 87 5.7.3 修改dual表对查询结果的影响 88 5.8 本章实例 89 5.9 本章小结 90 5.10 习题 90 第6章 约束(教学视频:43分钟) 91 6.1 主键约束 91 6.1.1 主键简介 91 6.1.2 创建主键约束 92 6.1.3 修改表的主键约束 94 6.1.4 主键应用场景 96 6.2 外键约束 97 6.2.1 外键简介 97 6.2.2 创建外键约束 97 6.2.3 级联更新与级联删除 100 6.2.4 修改外键属性 102 6.2.5 外键使用 104 6.3 唯一性约束 105 6.3.1 唯一性约束简介 105 6.3.2 创建唯一性约束 105 6.3.3 修改唯一性约束 107 6.3.4 唯一性约束的使用 108 6.4 检查约束 108 6.4.1 检查约束简介 108 6.4.2 创建检查约束 108 6.4.3 修改检查约束 110 6.4.4 检查约束的使用 111 6.5 默认值约束 111 6.5.1 默认值约束简介 112 6.5.2 创建默认值约束 112 6.5.3 修改默认值约束 113 6.6 本章实例 115 6.7 本章小结 116 6.8 习题 116 第7章 视图(教学视频:50分钟) 117 7.1 关系视图 117 7.1.1 建立关系视图 117 7.1.2 修改/删除视图 118 7.1.3 联接视图 120 7.1.4 编译视图 122 7.1.5 使用force选项强制创建视图 124 7.1.6 利用视图更新数据表 125 7.1.7 with check option选项 126 7.1.8 关系视图小结 128 7.2 内嵌视图 128 7.2.1 内嵌视图简介 128 7.2.2 内嵌视图的使用 128 7.2.3 内嵌视图小结 130 7.3 对象视图 131 7.3.1 对象视图简介 131 7.3.2 对象视图简介 131 7.4 物化视图 133 7.4.1 物化视图简介 133 7.4.2 物化视图的使用 133 7.4.3 物化视图的数据加载 135 7.4.4 物化视图的数据更新 135 7.4.5 查询重写 136 7.5 本章小结 136 7.6 本章实例 137 7.7 习题 137 第8章 函数与存储过程(教学视频:48分钟) 138 8.1 函数 138 8.1.1 函数简介 138 8.1.2 创建函数 139 8.1.3 函数中的括号 140 8.1.4 函数的参数 141 8.1.5 函数的确定性 142 8.1.6 典型函数举例 143 8.2 存储过程 144 8.2.1 存储过程简介 144 8.2.2 创建存储过程 144 8.2.3 存储过程的参数——IN参数 146 8.2.4 存储过程的参数——OUT参数 147 8.2.5 存储过程的参数——IN OUT参数 149 8.2.6 存储过程的参数——参数顺序 149 8.2.7 存储过程的参数——参数的默认值 152 8.2.8 存储过程的参数——参数顺序总结 153 8.3 程序包 153 8.3.1 规范 153 8.3.2 主体 155 8.3.3 调用程序包中的函数/存储过程 157 8.3.4 程序包中的变量 158 8.4 本章实例 159 8.5 本章小结 161 8.6 习题 161 …… 第9章 游标(教学视频:36分钟) 162 第10章 触发器(教学视频:58分钟) 178 第11章 序列(教学视频:28分钟) 206 第12章 用户角色与权限控制(教学视频:45分钟) 215 第三篇 Oracle中的SQL 第13章 Oracle数据类型(教学视频:21分钟) 231 第14章 Oracle中的函数与表达式(教学视频:111分钟) 240 第15章 Oracle中的控制语句(教学视频:16分钟) 282 第16章 SQL查询(教学视频:55分钟) 290 第17章 SQL更新数据(教学视频:34分钟) 319 第四篇 Oracle编程高级应用 第18章 数据库速度优化与数据完整性(教学视频:32分钟) 332 第19章 数据一致性与事务管理(教学视频:46分钟) 341 第20章 并发控制(教学视频:35分钟) 356 第21章 Oracle中的正则表达式(教学视频:29分钟) 369 第五篇 Oracle与编程语言综合使用实例 第22章 Oracle在Java开发中的应用(教学视频:38分钟) 376 第23章 Oracle在C#开发中的应用(教学视频:12分钟) 391

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧