2000万条数据的Oralce数据库SQL查询优化经验

日期: 2010-05-04 作者:jirigala 来源:TechTarget中国 英文

  1:今年公司里有一些人辞职了,他们大多都觉得在公司没有发挥潜能的机会、没被公司重视、没给足够高的薪水或者其它单位有更高的薪水。

  2:公司有一个2000W条数据的Oralce查询功能,运行速度有些缓慢,但是一直没人能有效解决这个问题,或者对此没啥兴趣爱好。

  3:有一部分人觉得,自己不是干数据库技术的,有些人觉得这个事情不管他的事情,有些人觉得这个没办法解决,但是客户的反应有些强烈。

  4:这个事情也变成了老板、项目经理、客户经理的一块心病,甚至影响了整个项目的验收及收款,我们只能迎难而上。

  当老板把这个任务压到我们开发部头上时,我们逃也逃不掉,虽然我们平时是写C#程序为主,但是数据库性能优化也只能由我们自己做:

  当时觉得需要2周时间有希望能解决,1周熟悉业务及数据结构,另1周用来性能优化,我也是新来的,对项目不熟悉、功能也不熟悉,所以觉得需要2周时间也是天经地义的,但是老板说必须要解决这个问题而且只能给1周时间。

  没办法的事情老板的命令下来了只能执行,要们就丢这个饭碗,我就跟我们公司的一个搭档承担了这个攻坚任务。

  曾经很多年前,优化过别人的MYSQL的数据库查询优化,当时公司里有个程序员,觉得自己的数学水平高、编写程序思路也很严,平时谁也不服,也不把别人放在眼里的那种,当他有一个数据量很大的程序运行效率比较低时,老板让我看看是否能提高性能,我足足用了半个小时,优化了他的SQL语句,结果性能提高了10倍,只用了1/10的运行时间就可以了,这次成功的SQL优化,给了我很大的信心,而且开始对性能优化有了很高的兴趣。

  后来几年里看了很多数据库方面的资料,但是一直没遇到过能发挥实力的机会,也学了很多数据库脚本编成,但是一直没机会能露两手,不过自己一直是对数据库优化很有信心了,平时也很自信。

  但是最近几年,心思没在数据库优化上了,大多是用在“大规模编程系统架构优化”上,而且Oralce没有用也有好几年了,开始也不敢吹了,毕竟不是天天干这个的,时代发展得也快,新技术都没留意过了。

  自己没信心了,那就先找找这方面的专家,看看人家有没有什么好的建议吧,我和我的搭档就开始这个痛苦的数据库优化工作了。

  01:先找集团内部的资源,找名气比较大的专业的数据库管理员,给了我们一些建议系统底层优化的建议,对我们没实质性的进展,失败。

  02:只能硬着头皮与同事们一起深入研究,发现SQL语句也很复杂,并没有想象的那么简单。

  03:把比较复杂的SQL语句先分解成若干个简单的SQL语句,运行、失望,性能影响不大,失败。

  05:里面有些多余的字段被SELECT出来的字段,去掉了,没有明显的进展,影响不大,失败。

  06:SELECT 出来的东西,再进行了SUM操作,感觉内存里的处理数据过大,先进行SUM,再进行SELECT,没有明显的进展,影响不大,失败。

  07:把2000W条数据的表,拆开成若干个表,每个表达该500W条数据,没有明显的进展,影响不大,失败。

  08:修改数据类型,把数值类型的长度、精度在变小点儿,影响不大,失败。

  09:数值类型比较,例如日期类型的比较,不要转成字符再比较,人家已经这么做了,没这方面的缺陷。

  11:查询条件的先后顺序调整,影响不大,失败。

  12:将过滤条件放到子语句里,选出来的数据尽量小一些,影响不大,失败。

  13:再看看索引,以前的开发人员索引设置得也比较合理,而且他们告诉我们,他们做测试优化索引,耗时会更多,去掉索引反而还会好一些。

  14:经过这8个步骤,我是有些失望了、心情沉重,但是我不能把这个表现出现,还是继续表现得很自信,不管遇到什么困难,都需要给自己打气、给自己信心,男人要坚强、只能靠自己了。

  15:接下来足足想了一晚上,问题会出在哪里?数据库的极限能力是多少?找谁咨询?2000W条数据不应该是Oracle的性能瓶颈呀,问题应该是我们身上。

  16:继续坚信问题应该是在设置索引上,继续把重点突破口放在深入索引设置上,按不同的组合、不同的索引方式进行优化。

  17:索引优化后,奇迹出现了,性能提高了100倍,唉,这下不用丢饭碗了谢天谢地了,问题搞定了,可以给老板一个交待了,老天不想灭我们2个呀。

  18:不管是干啥,都需要靠自己,不要指望靠别人能解决问题,关键时刻,一定要对自己时刻打气、始终需要保持必胜的信念。

  2000W条数据的性能优化,我跟搭档一起努力做到了,下一次目标是2亿条数据的性能优化瓶颈了,还是照样需要有信心的。

  去年做的是百万元RMB级别的信息管理系统,今年开始在做千万元RMB级别的信息管理系统,将来会是亿元RMB级别的信息管理系统了,还是照样需要有信心的。

  每天、每年都在挑战自己能力的极限,每年身心都会死三回,每次挺过来了都会升华三回,需要记住职场不同情弱者。

  想要当个过硬的技术主管不仅需要有“心灵鸡汤”、还需要拿实力证明的,老板不需要“心灵鸡汤”。

  以下是千万级Oracle数据库性能优化的前后对比表,Oracle为什么那么值钱,唉、不服不行啊、这就叫科学技术,哪一天我若能做到了就是死也愿意了。

  

  每个软件公司都有很多问题在困扰着老板、客户,只有能及时解决这些棘手问题的人,才是公司最需要的人才,很可能机会就摆在你眼前,其实你也可以的。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

作者

jirigala
jirigala

相关推荐

  • 介绍PostgreSQL的数组类型

    PostgreSQL 有很多丰富的开箱即用的数据类型,从标准的数字数据类型、到几何类型,甚至网络数据类型等等。

  • Redis sds数据结构实现分析

    sds(Simple Dynamic Strings)是Redis中最基本的底层数据结构, 它既是Redis的String类型的底层实现,也是实现Hash、List和Set等复合类型的基石。

  • MySQL特殊数据类型分析

    MySQL数据库产品提供了三种特殊用处的数据类型: SET(集合类型)、ENUM(枚举类型)、BOOL/BOOLEAN(布尔类型)。

  • MySQL数据库的SQL优化

    优化 SQL,需要做到心中有数,知道 SQL 的执行计划才能判断是否有优化余地,才能判断是否存在执行计划问题。