Oracle
梁敬彬
数据库技术专家,著有《收获,不止Oracle》、《收获,不止SQL优化》等多本畅销数据库技术书籍。
展开
-
普通表自动改造分区表
create or replace package pkg_deal_part_tab Authid Current_User as /* 功能: 实现普通表到分区表自动改造工作 */ procedure p_rename_001 (p_tab in varchar2 ); procedure p_ctas_002 (p_tab in varchar2, p...原创 2019-12-13 16:24:49 · 426 阅读 · 0 评论 -
经典等价改写7(避免使用触发器)
在数据库设计中,我们要尽量避免使用触发器,主要有两大坏处:首先是代码不利于统一管理,隐藏在数据库中;其次是性能问题,基于行级的触发器会导致每更新一行就会触发一次表的动作,这种极频繁的调用是性能的致命伤害。构造例子,举例说明如下: 构造环境,建表建触发器。 set pagesize 3000; set linesize 300; set trim on –creating table drop ta...原创 2019-11-26 16:51:21 · 185 阅读 · 0 评论 -
经典等价改写6(减少函数调用)
虽然说我们要设法避免进行函数调用,但是很多时候我们是无法避免的,比如有一些逻辑特别复杂,核心人员对其做了函数封装,成为开发公约的模式交给开发人员去调用,这时基本上开发人员就很难转化成普通的表关联方式了。 不过避免不了调用的情况下,我们还可以设法减少调用,请看构造的系列例子: 首先是构造环境 drop table t1 purge; drop table t2 purge; create table...原创 2019-11-26 16:47:48 · 186 阅读 · 0 评论 -
经典等价改写5(避免函数调用)
笔者接下来要描述的,是一个典型的优化场景,关于对SQL中带函数的写法的一些认识。一般来说,我们尽量避免SQL中带函数,可以考虑将函数的写法转化成表连接的写法。因为前者会产生大量的递归调用,往往表的记录有多少条,函数就被调用多少次,性能会特别糟,请看构造的例子如下: 首先是构造环境。 drop table people purge; drop table sex purge; create tabl...原创 2019-11-26 16:41:05 · 133 阅读 · 0 评论 -
经典等价改写4(只取所需列)
1.4 只取你所需的列12.1.4.1 只取所需列,访问视图变快 这是一个经典的例子,当你的语句没有select * 而是精准的获取到哪些列时,你可能连访问的表都变少了,原本访问两张表,忽然变成只访问其中一张表了,听起来有点不可思议是吗?好吧,做一个试验给大家看看这个场景。 环境准备,建一个视图v_t1_join_t2 drop table t1 cascade constraints purge...原创 2019-11-26 16:38:24 · 205 阅读 · 0 评论 -
经典等价改写3(插入提速)
1.3 如何让插入的速度最快 还记得在体系结构5.2.2.3章节里有提到过的直接路径访问性能差异明显的例子吗?这里就不再重新举例了,如果我们增加并行、关闭日志,也可以让插入速度变得更快,不过这两部分则属于加大吞吐量减少开销的犯错,具体见如下表格,算是对之前案例进行补充完善,如下 如何让插入的速度最快 ...原创 2019-11-26 16:36:47 · 130 阅读 · 0 评论 -
经典等价改写2(rownum分页)
1.2 Rownum分页改写 Rownum是Oracle的一个伪列,是Oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,且rownum不能以任何表的名称作为前缀。 这里先介绍一个基本常识:如果你用>,>=,=,between…and这些条件,因为从缓冲区或数据文件中得到的第一条记录的rownum为1,则...原创 2019-11-26 16:34:07 · 134 阅读 · 0 评论 -
经典等价改写1(case when 改造)
SQL优化的本质就是减少访问路径,前面的章节中我们已经学到了很多减少访问路径的思路,比如增加索引从全表扫描转换成索引范围扫描,比如表改造成分区表从全表扫描转化成局部分区扫描,这些都属于不需要改写SQL就完成的减少访问路径的思路。当然,在很多场景下,我们还是必须要完成有些等价改写的,比如case when改造、rownum分页改写等等。 除了减少访问路径外,我们还要注意避免外因的影响。比如一些执行计...原创 2019-11-26 16:32:13 · 640 阅读 · 0 评论