给PLSQL插上飞翔的翅膀-PLSQL优化

60-80% of database performance issues are related to poorly performing SQL,60-80%的数据库性能问题要归结于生产中糟糕的SQL语句!

以此一文来总结笔者近10多年来的工作经验并基于最基本的也是最有效的对于Oracle数据库中的RBO、CBO、索引、WHERE条件进行讲解同时配以大量案例来帮助读者从此文中学到的相关的理论知识快速的运用到其正在从事的生产环境中的优化过程中去。

优化的理论基础

通过Select Count(?)进入优化之旅

不看百度或者GOOGLE说出下面3者的区别?

SELECT COUNT (*)

SELECT COUNT(1)

SELECT COUNT(字段名)

SELECT Count(?)的知识

ORACLE的优化器

要说PLSQL优化,我们先需要来好好说一下Oracle优化器的知识:

优化器的优化模式

CBO模式

RBO模式

一起来看看oracle优化器的发展历程

所以,我们知道ORACLE10后开始默认使用CBO,在CBO时ORACLE会自动来选择最优的执行计划,有时我们会认为:这个应该走索引更好啊,但是对于CBO来说,一个FULL TABLE ACCESS反而比索引更有效。

因此,在CBO的模式下,我们需要做的就是:

  1. 做好数据库信息的相关统计
  2. 合理建设我们的索引
  3. 优化我们的SQL

让我们从索引的基本知识下手吧

索引是不需要修改SQL最直接带来性能提升的利器,何时该建索引,怎么建?怎么样让你的索引更合理?

索引按内部结构分类

索引按功能分类

索引按索引对象分类

建立索引的方法论

上面介绍了这么多索引的分类,下面来讲讲建立索引的方法论吧,大家可能较关心这个,因为这个是经验总结也是实战有用的利器哈。

不建议建立索引的情况

索引很神奇,可是索引不是万能,有时你建了索引也等于没用或者是白建、作无用功,为什么呢?我们看下去。

索引不会生效的情况

所以索引不要乱建,有时建了也是白建,为什么呢?来看看下面的案例分析吧:

以案例来说明

PLSQL优化>一个不走索引的优化案例

这个例子说明了,如果你有一字参于WHERE条件查询的字段,但是它参于了运算符,因此它在ORACLE的内部执行计划中是不会走索引的,因此我们做了一个小小的变化,效率提升了多少倍?5.3倍,530%,呵呵!

以上例我们可以为建立索引作一个总结。

建立索引的总结

Table Analyze

Analyze Table VS DBMS_STATS

Import & Export

说到Import & Export命令,大家会说。。。哎,这个不是很简单,就是:imp username/pwd@oraid file=path 吗?嘿嘿。。。试想:

  1. 你需要导入一个8GB左右的.dmp文件进入数据库
  2. 你需要将一个库,其中含有至少30张表并且每张表都超过1200万条记录的数据进入一个.dmp文件

然后你去试试看这个耗时。

Import的常规做法

这是一个真实的案例,我们在CCC即世界著名车险公司项目中,我们定期会和CCC芝加哥总部同步一个8GB左右的.dmp文件进入我们的数据库,由于安全原因因此需要依靠.dmp交换文件的形式于零晨同步至中国的数据库,并且在T+1第二天早晨的8:00前完成同步。

于是,我们的DBA开始来了。。。。。。

从零晨到第二天早上8:00,硬是没有导完,一查,数据库中session已经超时了,连续2天还是这样。

于是,我们把原有的语句稍稍作了一下变化:

只是把原来的一句imp折成了2条:

  • 第一条,只导数据,不导索引,并且设置成10000条数据一次commit,同时设置了一个缓冲池
  • 第二条,只导索引,不导数据,并且设置成10000条数据一次commit,同时设置了一个缓冲池

结果让人惊叹。。。发觉最后只用了40分钟不到,两条语句全部执行完毕,完成了导入。。。其实这个原因我可以用下面2个例子来说明:

  1. 一个含有8GB文件内容的目录,用FTP客户端下载,你会发觉似乎永远等不到头,几小时就这样耗着,然后你改成先把这个目录打成一个压缩包,然后再用FTP客户端 下载,几十分钟就能搞定。
  2. 你用JDBC写一个FOR循环插入100万条记录。。。结果是ORACLE直接爆掉,而你采用批量提交。。。结果是惊人的!

其实我们当时所做的折分,原理如同上述两个案例,是一样的道理,减少IO读写,设置缓冲,批量提交。如果你的事务太大。。。。。。

以案例来说明PLSQL的优化

PLSQL优化-SELECT IN 与SELECT EXISTS

这边提高了多少?光看IO就知道提高了多少了,呵 呵,很好玩吧?再来!

PLSQL优化-SELECT IN的几种优化

PLSQL优化-SELECT IN、OR、UNION的互转

看看3次修改,最后一次,提升了多少倍?11.2850-0.0261再除以0.0261=431.375,431.375倍。。。。。。一条SQL啊。。。在寸土寸金的互联网应用中,单条SQL提高了431.375倍。。。这是什么概念!!!

你好讨厌!!!再来!!!

PLSQL优化-分页语句中加入索引的优化

以下是一条分页语句,我们对created_date做一个索引,等。。。。。。等等等,这边的索引不是一般的索引,我们把图形化工具建的索引翻译成SQL:

create index IDX_WAREHOUSE_CT on T_WAREHOUSE(CREATED_DATE DESC);

我们这个表是一个含有1000万条记录的表,仅此一招,整个SQL查询提高了300%-340%

PLSQL优化-INNER JOIN VS WHERE

PLSQL优化-WHERE语句优化要点

注意下面这个例子,只是WHERE条件后的顺序上下颠倒一下,就提高了10倍的效率,呵呵。

WHERE语句中选择最有效的表名顺序

好玩吧!!!再来!!!

PLSQL优化-用UNION取代OR

看看下面这个例子吧:

是不是写SQL时稍微注意一下。。。这个效率。。。这个性能 。。。123%。。。123%的提高啊。

PLSQL优化>共享SQL

前面我们用好几个实例说了一下PLSQL中最基本的一些性能上可以带来的提升,这边我们需要提一下ORACLE自带的一个缓冲SQL结果集命中率的工具

所以,我们在写SQL时要用JAVA的PreparedStatement,要用:1这样的东西来做传值,因为ORACLE是自带SQL缓冲池的,另外在此要多说一句的是,虽然ORACLE10后开始带有ASM(自动内存管理),但有时ASM不是万能,对于一些大形网站,有时我们的DBA是需要手工去调整ORACLE的SGA,即:

因此,这对我们的ORACLE DBA来说提出了更高的要求。

PLSQL优化的基础掌握了上述几点,基本可以让你的系统性能提高2位数-3位数,后续感兴趣的读者还可以继续去看:

如何自学

对于ORACLE的PLSQL相关调优该如何自学呢?

是不是很自虐哈。。。

那我们就用著名的Opensource界的一句铭言:play by yourself, play with it。

用中文来说那就是:自虐着并快活着

要成为“东方不败。。。”-- 苍海。。。笑。。。涛涛两岸潮。。。呵呵。

笔者联系方式:

QQ:42948648

微信:

时间: 2024-08-05 10:04:16

给PLSQL插上飞翔的翅膀-PLSQL优化的相关文章

给SNS模式插上飞翔的翅膀

08年,不特别,因为特别好多朋友又一窝蜂的去做SNS网站了,纷纷模仿FACEBOOK,或者模仿校内网或海内,在短短的2个月里就收到了几十个SNS网站的邀请注册信.有大公司也有小公司,大多都是千篇一律,没有什么创新和特色.最近的校内网拿到了几亿美金的投资,更是让中国的SNS网站高潮迭起,许多公司纷纷开始常识做SNS网站.至少SNS模式可以比博客更有发展潜力和市场,更能胜任和符合网民的需求特点.假如SNS模式插上了飞翔的翅膀,其效果会怎么样呢? 1. B2B电子商务网站用SNS模式来做 假如真这样做

互联网,让纪录片插上飞翔的翅膀

近日,前央视主持人柴静所制作的纪录片<穹顶之下>在上线当天播放量破亿,其有关雾霾的问题引发多方在互联网上广泛讨论和争吵. 雾霾热度尚未冷却,在大洋彼岸的英国,纪录片又闯祸了.BBC印度强奸案纪录片<印度的女儿>引起了印度的分裂,遭到当地政府的强烈抵制,BBC不得已收敛了自己用"言论自由"当挡箭牌傲慢态度,被迫撤下在YouTube的视频. 短短两部纪录片竟能造成如此轰动效果,即使之前有<舌尖上的中国>做铺垫,但也着实令中国的观众极为震惊,纪录片在这里只

为PowerPoint文档插上音乐的翅膀

Powerpoint 2003的功能已经相当丰富,但还没有一种直接为整个幻灯片添加背景音乐的功能.虽然我们可以通过依次点击"插入-影片和声音-文件中的声音"的方法来插入音乐(图1),但是当演示到下一张幻灯片的时候音乐就会停止.因此要使整个幻灯片使用一个背景音乐似乎是不可能实现的事情. 文档插上音乐的翅膀-powerpoint文档恢复"> 但事实并非如此,下面我就将我在实际操作中所总结的在PowerPoint中实现插入背景音乐的两种方法和大家一起分享(本文以PowerPo

中海阳:拥抱“十三五” 让光伏插上腾飞的翅膀

回顾光伏行业过去的2015年,脑海里立马浮现出了好几个记忆深刻的关键词,欧盟反倾销.光伏补贴.汉能李河君等等.虽然在光伏的这条路上充满着血和泪,但是,他们挺过了2015,迎来了崭新的2016年,迎来了"十三五"规划的开局之年,迎来了整个光伏行业涅槃重生---. 针对光伏行业的"十三五"规划,我们采访了光伏行业的领军企业中海阳的相关负责人,该负责人表示:"随着光伏"十三五"规划的成功落地,国家针对光伏行业的政策红利将会在极大程度上促进我国

视频监控为校园安全插上“隐形的翅膀”

随着公众社会安全防范意识的提高,安防系统慢慢在各种公共场合普及.而我国教育事业的发展,高校的规模越来越大,学生人数不断增多,校区开放程度和后勤服务社会化程度亦越来越高,学校的管理工作和安全保安工作面临新的课题,校园安防也凸显了无限的商机.最早接触的校园监控系统是高中的学校,在没个教师安装的高速球,但当时的主要作用是监督学生的上课情况和自习情况.而现在校园安防已经在各大中小学慢慢普及开来. 校园安防--安防行业的下一片"蓝海",各地高校的开放度高,人员杂,流动大,因而增加了校园安防工作的

给传统营销插上数字化的翅膀

营销中所谓的传统在于传统的思维与意识.传统的传播内容与手段,然而在数字化时代背景下,杂糅了新营销元素的整合营销多了起来.若单纯只进行传统营销而 忽视了数字营销,确实不合时宜,所谓与时俱进,在营销上也如此. 在众多行业中,譬如在央视广告招标上闪亮夺目的酒类企业,其通过央视覆盖力强大的传播阵势,塑造品牌,这是一个行业的传播特征,高举高打的品牌需要强 曝光,需要选择对的媒介.早前在业界一直流传这样一句话:"品牌"知名度=广告投入量.比如耐克品牌每年全球广告投入15-25亿美元的广告费用,广告

AMD郭可尊:用信息化为农民插上致富的翅膀

为了配合国家"电脑下乡"政策的深入推广,加速农村信息化建设,11月19日,由工业和信息化部指导,全球领先的半导体企业AMD公司负责建设的 "农村综合信息服务培训中心"落户安顺市平坝县夏云镇.工业和信息化部信息化推进司副巡视员张保泰,AMD公司全球高级副总裁.大中华区总裁郭可尊女士以及贵州省经济和信息化委员会.安顺市的相关领导出席了该培训中心的揭牌仪式. 据悉,"农村综合信息服务培训中心"由工业和信息化部指导支持,AMD公司负责建设.在建设过程中,

当教育插上互联网的翅膀,在线教育还需本质突破

被不断"神化"的互联网思维,随着互联网的不断普及,已深入各行各业,教育行业也不例外. 用互联网思维改造传统行业似乎成了一个致胜的法宝.在线教育就是在这样的背景下,在2014年彻底地爆发了. 这一年以来,互联网对教育行业发起了前所未有的冲击,教育,这一个人类最悠久的行为分支,在近一两年中被迅速地改变着.学生们从单纯依赖教室授课的模式,变得更多的利用屏幕接触知识. 据统计数据显示,2013年年初以来,平均每天有2.6家在线教育公司诞生,另外多达60家在线教育企业获得了投资,有的甚至未上线就

为电子商务插上社会化的翅膀(二):四字箴言

中介交易 SEO诊断 淘宝客 云主机 技术大厅 接昨天的话题为电子商务插上社会化的翅膀(一),今天开始写写PPT中最后一部分,电子商务网站(这里主要是针对网络零售商)如何实现社会化.也许现在很多电子商务网站或多或少都在做这个事情,或者有计划要做,而做的最多的事情是通过社会化媒体去做一些推广工作,今天我会比较全面的为大家介绍下电子商务网站如何实现社会化. 电子商务网站实现社会化的四字箴言 电子商务网站实现社会化,必须要内外兼修,而我提出的四字箴言添(特性),育(社区),接(关系),建(基地)也是从