摘要:我在和群友闲聊的时候无意中发现了一些大学生。这些没有毕业的学生身上有很多我当年的影子。回忆一下那些年的我,似乎对未来,对工作,都是很没有概念的,甚至有点抵触进入社会的。 每次听到学生们抱怨,现在的公司都是要有经验的,我们大学生没有经验,怎么可能找到工作?!我当时也是这样想的,至于我为什么这样想,恐怕是因为我每天都在看的新闻和每天都在上的招聘网站上的信息带给我的恐惧,深深的恐惧。可是真的到了那年的3月,当我决定去找工作的时候,我发现在学校举办的招聘会宣讲会什么的并没有传说的那样可怕。我们学校因为属于国防科工委,大型招聘会上有很多很多的国企,都是些造飞机导弹和大炮的,基本上看看成绩单,觉得人... 阅读全文
posted @ 2012-02-24 22:21 wingsless 阅读(1379) 评论(0) 推荐(2) 编辑
摘要:很多朋友都问过我优化SQL的事情。我觉得在我不断地鼓励下,很多朋友现在都知道优化SQL之前要先看看执行计划,也在优化中获得了很多快乐。但是今天有人问我执行计划应该怎么看。我觉得这是个值得写一写的东西。 2012年6月21日增加: 我下面的执行计划是怎么打印出来的,很多朋友还是不知道。其实语句只有三条: explain plan for 你要查看的SQL语句;commit;select * from table(dbms_xplan.display); -----分割线---------------------------------- 先告诉大家一个原则,看执行计划的... 阅读全文
posted @ 2012-02-24 20:42 wingsless 阅读(19609) 评论(7) 推荐(3) 编辑
摘要:很久以前,在我还在某国企的时候,我被领导要求优化一段SQL。说真的那个时候我根本不知道SQL的优化为何物,但是百度google之后我发现所有的资料都写有这么一条:把选择性大的条件子句写在最后。因为oracle在执行的时候从底向顶执行。这句话我当时笃信不疑。可是后来我查到更多资料以及对SQL优化有了更深的理解之后,我发现那句话是RBO,而现在的oracle采取CBO。那么SQL到底是不是从下向上执行的?这个疑问后来在一次错误中被解决了。 有这么一个表,叫做test,有两个字段ser_id,area_id。但是我记不住了,我写了以下的SQL: select * from test wh... 阅读全文
posted @ 2012-02-18 22:18 wingsless 阅读(2262) 评论(9) 推荐(1) 编辑
摘要:近来在工作上遇到一件事情。我有一张用户订单表,这个订单表有一个order_id,是唯一约束。同时有一张订单流程表,和订单表以ser_id关联,一个ser_id至少对应一条订单流程记录。现在我要将两个表汇总,成为一张表,以ser_id为唯一约束,其中一个字段来自流程表,这个字段是ser_id对应的几条工作流程记录中work_id最大的。 大致上订单表示这样的: order_id ser_id ...... 112333 100001 122112 100001 122882 100211 ...... 而工作流程表是这样的: work_id ser_id .... 阅读全文
posted @ 2012-02-12 01:55 wingsless 阅读(16996) 评论(0) 推荐(3) 编辑
摘要:上周我写了一篇博文,里面有一点关于分区表的论述(http://www.cnblogs.com/wingsless/archive/2012/02/04/2338292.html)。但是我发现我少写了一点,在你的查询条件和分区列没有太大关系的时候,分区表不会帮助你提高效率。 图1图2 我是按照area_id分区的,图1的执行计划: 图2的执行计划: 建立一张表,这张表的数据和test一样,但是没有分区,执行一下图1中的语句,查看其执行计划: 可以明显的看出来,分区表的执行计划多了一个PARTITION LIST ALL,明显增加了CPU的耗用。再看看图2中SQL在test... 阅读全文
posted @ 2012-02-11 21:42 wingsless 阅读(2065) 评论(2) 推荐(1) 编辑
摘要:在之前的工作中,我曾经遇到过表特别大的情况,这个时候我想到了使用with来降低查询的消耗,前文中已经有了描述:http://www.cnblogs.com/wingsless/archive/2012/01/15/2323060.html。今天我突然想到,其实用with和from (select)应该没有本质的差别。所以做了个小实验。 我的表大概7W行,使用with的SQL语句如下: WITH A AS (SELECT T.OWNER, T.OBJECT_NAME, T.OBJECT_ID, ... 阅读全文
posted @ 2012-02-04 21:24 wingsless 阅读(3406) 评论(2) 推荐(1) 编辑
摘要:有的时候会遇到这样的问题,我们需要查询一张表,而且要按照业务排序,比如我需要如下的结果: 地区 日期 费用 产品编号 用户编号 290 201202 258 1 s1 290 201202 200 1 s5 290 201202 100 1 s100 290 201202 90 2 s7 290 201202 88 2 s9 290 201202 10 2 s12。 领导让我出一张报表,需要看到每一个业务的收费前三名是那些客户。这个时候用rank() over(partition)是一个很不... 阅读全文
posted @ 2012-02-04 20:41 wingsless 阅读(52574) 评论(0) 推荐(2) 编辑
摘要:我想祥和应该是最近我们这个国家的主题,大家都很高兴。其实过年对于我来说,也就是吃吃饭,看看电视,好好休息一类的。但是不知道为什么,每年我都很期待过年。每到过年前,我都很高兴。 我想这种高兴应该是每一个炎黄子孙血液里的。很多年以前,当我还是一个初中生的时候,我的心里充满了叛逆,我的心里也充满了盲目。那个时候班里有几个人和我关系不错,我们总是一起玩儿,于是我也多多少少的被他们影响了。那个时候论起来,偶像剧没有现在多,也没有穿越,只有为数不多的几个港台明星,没有周杰伦,没有蔡依林,没有陈奕迅,那个时候最多最多的应该就是无印良品,或者有backstreet boy或者westlife。可是那个时... 阅读全文
posted @ 2012-01-26 11:58 wingsless 阅读(252) 评论(0) 推荐(0) 编辑
摘要:前两天的业务需求里需要关联好几张表出一个详单报表,这个需求其实很简单,但是数据量大,源表又不是分区表,就变得很头疼了。 最初我的代码大概是这样子的:select a.id,a.name,a.code,b.type,( select p_name from C c where c.pid = b.pid)from A a, B bwhere a.id = b.id and a.id > 1000; 这样的话如果三个表数据量小就没事儿了,一会儿就跑出来了。但是我们的A表上亿,A一个id对应B里的好多个id,那么B的数据量就更大了。C也差不多,这样一来就要老命了。这个时候我想到了... 阅读全文
posted @ 2012-01-15 20:59 wingsless 阅读(4395) 评论(13) 推荐(3) 编辑
摘要:今天遇到了一个问题,需要对比一个字段和5的大小,大于5的输出0,小于五的输出1。如果是用PLSQL编程的话可以用if/else这种逻辑进行判断,但是在SQL里可不能这么写,经过网友推荐,我组合使用了sign和decode,效果很好,代码小清新。 代码如下: DECODE(SIGN(TRUNC(COL1 - COL2) - 5), 1, 0, 1) ONTIME_FLAG 这样就可以了。 sign函数的作用是这样的: 如果sign的参数为负数,就会输出-1,如果为正数就会输出1,如果为0则会输出0。这样的话,加上decode,就可以按照我的想法进行计算输出了。 而且s... 阅读全文
posted @ 2012-01-08 00:09 wingsless 阅读(1525) 评论(0) 推荐(1) 编辑
摘要:今年一年辞了两回职。 这也是我突破性的一年了。从研究所辞职的时候其实还有带有不舍的,因为毕竟在那里开始了我的职业生涯,而且也学会了不少东西。后来去了大唐,说起来,这段不长的工作经历着实让人唏嘘不已。 我相信我在研究所干的不错,领导安排的任务都能很好地完成。常常扮演救火队员的角色冲向全国各地,从不辱没使命。我想对于我的部门来讲,我没有一点点的愧疚,我干的很好,我也为部门的繁荣和发展出了我的一份力。可是偏偏造化弄人,就在我想大干一番的时候,领导却偏偏把我弄去一个集中营似的部门,那里所有的人,都和我一样,年轻的时候充满热情,却因为开罪领导,被贬至此,以至于沉沦于黑盒测试。 那个时候... 阅读全文
posted @ 2012-01-01 00:29 wingsless 阅读(2944) 评论(21) 推荐(4) 编辑
摘要:今天群里有人问关于数据库进程的事情,当然,他对oracle的后台进程不是很熟悉。当时我举了个例子,是关于LGWR,但是由于我学艺不精,当时只想起来了这个进程会被commit激发,实在是贻笑大方。回来以后查了一下书,于是记录在此,也算是和大家的分享吧。 LGWR被触发的情况: 1 commit。在提交之后,oracle会先把确认信息写到日志缓冲区里,然后再激发LGWR,将日志缓冲区内的Redo Entry写到联机重做日志文件里。 2 如果尚在日志缓冲区内的Redo Entry超过三分之一以上日志缓冲区大小的话,就会触发LGWR,将Redo Entry写到联机重做日志文件里。 3 LG... 阅读全文
posted @ 2011-12-28 21:37 wingsless 阅读(1013) 评论(0) 推荐(2) 编辑
摘要:安装oracle时还需要修改的几个文件和参数:/etc/security/limits.confnproc:可以开启的进程数量nofile:可以开启的文件数量/etc/pam.d/login,改成这样:#Add for Install Oracle Database 11gsession required /lib/security/pam_limits.sosession required pam_limits.so修改/etc/profile,添加如下内容:if [$USER = "oracle"]; thenif [$SHELL = "/bin/ksh&qu 阅读全文
posted @ 2011-12-24 23:32 wingsless 阅读(311) 评论(0) 推荐(0) 编辑
摘要:有这么一道题,是关于在实例启动的时候,哪些文件在某个阶段是不是可以改动的,我觉得这个题是一个很基础的题,对于理解oracle有很大的帮助。于是我就查了一下相关资料,分享一下,适合初学者看。 1 shutdown-->nomount: 读取参数文件,根据参数文件的记录,配置SGA,启动后台进程。这个阶段因为只读取了参数文件,因此能干的事情不少:建立数据库;重建控制文件。 上次我把参数文件搞坏了,startup命令以后就来到了nomount状态,在这里我把错误的参数文件去掉了,然后重启以后就好了。有深刻体会。 2 nomount-->mount: 根据参数文件的记录,读取控制文件。控. 阅读全文
posted @ 2011-12-24 22:50 wingsless 阅读(209) 评论(0) 推荐(1) 编辑
摘要:今天在群上跟技术友们聊天。发现有几个大学生,他们很担心自己找不到工作。我问他们理由,他们说我们没有经验,公司不要怎么办?这些孩子们的担心,让我感觉到奇怪。 如果我是一个公司的老总,我会有这两种考虑:要大学生,培养他们,他们很有朝气,也有可能很有灵气,有的能成为未来公司的台柱子;不要大学生,培养他们是要时间成本和金钱成本的。我想我是第一种老总,我愿意去好大学里招学生。我在西安,我就喜欢去西工大和西电招学生,这两个学校的计算机和电子信息都是一流的。 我不知道是谁在不停的宣传,说什么公司都要有经验的,你们大学生没有经验,很难找到工作。如果这些人是培训机构的人,我可以理解,你们可能是为了... 阅读全文
posted @ 2011-12-18 18:09 wingsless 阅读(12132) 评论(76) 推荐(10) 编辑