<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>jarwang</title>
    <description></description>
    <link>http://jarwang.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>Oracle Explain plan使用总结</title>
        <author>jarwang</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jarwang.javaeye.com">jarwang</a>&nbsp;
          链接：<a href="http://jarwang.javaeye.com/blog/214843" style="color:red;">http://jarwang.javaeye.com/blog/214843</a>&nbsp;
          发表时间: 2008年07月15日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          写多了SQL语句，伴随着数据量的海增，总会遇到性能的问题。在Oracle领域一个不好的习惯，一旦遇到性能问题就推给DBA来做。长期如此，反而对DBA的工作感到神秘。至少笔者所在单位就是如此，DBA向来是牛气冲天的。<br />   要调整SQL语句的性能，就得知道这条SQL语句花费了多少COST。Explain plan工具可帮我们分析这些工作。而调整SQL语句的性能，肯定要涉及索引了。Oracle索引比较常用的有二种，1.B-TREE索引，B-TREE 适用于值变化较多的列，2.BITMAP索引。BITMAP适用于值变化较少的列（少于300个值），比如：性别这样的列。<br />    有了上述基础就可以开始优化工作了。工具：pl/sql developer。<br />1.建表<br />create table HEK_TEST_IN<br />(<br />  PID   INTEGER primary key,<br />  NDATE DATE,<br />  NNOTE VARCHAR2(50)<br />)<br />create table HEK_TEST_INDETAIL<br />(<br />  PID   INTEGER not null,<br />  FID   INTEGER,<br />  NNAME VARCHAR2(50),<br />  NQTY  FLOAT,<br />  NNOTE VARCHAR2(50),<br />  NSIZE VARCHAR2(20)<br />);<br />alter table HEK_TEST_INDETAIL<br />  add constraint FK_TEST_1 foreign key (FID)<br />  references HEK_TEST_IN (PID);<br />create index HEK_TEST_INDETAIL_INDEX on HEK_TEST_INDETAIL (NNAME, NSIZE);<br /> <br />2.测试具体SQL语句到底有没有使用index。<br />  2.1条件查询:<br />      select *  from hek_test_in where pid=3<br />  Explain Paln输出;<br />SELECT STATEMENT, GOAL = CHOOSE                   <br /> TABLE ACCESS BY INDEX ROWID    Object owner=APPS    Object name=HEK_TEST_IN         <br />  INDEX UNIQUE SCAN    Object owner=APPS    Object name=SYS_C00211467  <br />分析得出:hek_test_in查询时使用索引扫描，为什么呢？因为我们创建表时，指定Primary Key时，Oracel会自动创建一个UNIQUE INDEX。        <br />-------------------------------------------------------------------------------<br /><br />  2.2连接查询:<br />      select * from hek_test_in a,hek_test_indetail b where a.pid=b.fid;<br />  Explain Paln输出;<br />  SELECT STATEMENT, GOAL = CHOOSE                   <br />   NESTED LOOPS                   <br />  TABLE ACCESS FULL    Object owner=APPS    Object name=HEK_TEST_INDETAIL           <br />  TABLE ACCESS BY INDEX ROWID    Object owner=APPS    Object name=HEK_TEST_IN        <br />   INDEX UNIQUE SCAN    Object owner=APPS    Object name=SYS_C00211467    <br />  分析得出:hek_test_in查询时使用索引扫描，而HEK_TEST_INDETAIL使用全表扫描。     <br />-----------------------------------------------------------------------------<br />   2.3组合索引的条件查询：<br />      select *  from hek_test_indetail where nname = ''<br />   Explain Paln输出;<br />SELECT STATEMENT, GOAL = CHOOSE                   <br /> TABLE ACCESS BY INDEX ROWID    Object owner=APPS    Object name=HEK_TEST_INDETAIL   <br />  INDEX RANGE SCAN    Object owner=APPS    Object name=HEK_TEST_INDETAIL_INDEX    <br />分析得出:查询时使用组合索引扫描。注：组合索引跟创建的列顺序有关，如果条件语句换成where nsize='',也会导至全表扫描。<br />－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－   <br />  2.4组合索引的排序查询：<br />      select *  from hek_test_indetail order by nname<br />   Explain Paln输出;<br />SELECT STATEMENT, GOAL = CHOOSE                   <br /> SORT ORDER BY                   <br />  TABLE ACCESS FULL    Object owner=APPS    Object name=HEK_TEST_INDETAIL           <br /> 分析得出:排序查询时无法使用组合索引，从而导致全表扫描。 <br /><br />  2.5 基于NULL条件查询：<br />   select *  from hek_test_indetail where nname is null<br />   Explain Paln输出;<br />SELECT STATEMENT, GOAL = CHOOSE                   <br /> TABLE ACCESS FULL    Object owner=APPS    Object name=HEK_TEST_INDETAIL           <br />分析得出:NULL查询导致全表扫描。与此类似的还有is not null,&lt;>也会导至全表扫描。<br /><br /><br />作者：Jarwang
          <br/>
          <span style="color:red;">
            <a href="http://jarwang.javaeye.com/blog/214843#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 15 Jul 2008 11:20:38 +0800</pubDate>
        <link>http://jarwang.javaeye.com/blog/214843</link>
        <guid>http://jarwang.javaeye.com/blog/214843</guid>
      </item>
      <item>
        <title>初涉Oracle ERP-ebs11i</title>
        <author>jarwang</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jarwang.javaeye.com">jarwang</a>&nbsp;
          链接：<a href="http://jarwang.javaeye.com/blog/214220" style="color:red;">http://jarwang.javaeye.com/blog/214220</a>&nbsp;
          发表时间: 2008年07月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          公司上的是Oracle ERP-ebs11i。近一个月的摸索，算是对这个号称全球ERP第二的东东有点认识了。<br />在这个领域，虽然ORACLE FORMS也是使用JVM来运行，但跟JAVA搭不上一点边。官方语言是PL/SQL。<br /><br />开发工具相当古老FORMS6i，要靠补丁才能在XP下运行。JAVA当中的模式、设计、分层等等，根本使用不上。<br />只是拖拉一下控件就好，就算你不想拖拉也不行。因为ORACLE FORMS根本不支持，只允许拖拉式编程。比VB/DELPHI这类语言还死心眼。唯一要编程的就是写些SQL代码，也谈不上什么分层，表现层与SQL混在一起。大多数的函数，ORACLE都内置了，没有内置的，你也非常难去实现。<br /><br />再说说这个EBS11i，操作非常不人性化。看个报表什么的，都是通过“请求”来实现，终端客户抱怨操作步骤太多，点来点去的，点到最后都快忘了要做什么！ORACLE的官方顾问却说，这是国际标准流程。一说到ORACLE的缺点，就拿“国际”两字来压人。报表呢？没一份符合国人习惯。也不知道 ORACLE ERP凭什么在国内站住脚？<br />EBS安装包相当大－32G，数据表的冗余量也非常大。一份采购单，在PO模块中有，在PO接口模块中也有，另外在AP模块也存一份。也就是说一份相同的数据存了三次。以前使用国内一个ERP时，数据备份时才100G左右，现在转到ORACLE时，都快到400G了。而且在以200MB/天的速度在增加。<br /><br />唯一值得一看的亮点就是跟财务管理模块高度集成。不知道这边有没有人接触过这个东东。
          <br/>
          <span style="color:red;">
            <a href="http://jarwang.javaeye.com/blog/214220#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 12 Jul 2008 16:07:50 +0800</pubDate>
        <link>http://jarwang.javaeye.com/blog/214220</link>
        <guid>http://jarwang.javaeye.com/blog/214220</guid>
      </item>
      <item>
        <title>Oracle EBS11i OM学习总结</title>
        <author>jarwang</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jarwang.javaeye.com">jarwang</a>&nbsp;
          链接：<a href="http://jarwang.javaeye.com/blog/214214" style="color:red;">http://jarwang.javaeye.com/blog/214214</a>&nbsp;
          发表时间: 2008年07月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          这是在JavaEye写的第一篇博客，这里好象搞ORACLE ERP的人也比较少。上次提供问了一个Oracle ADF与JBoss Seam比较的题头，好象是直接站长被“和谐”掉了。好了，言归正传。<br />  Oracle EBS OM：Order Manager 订单管理。OM是EBS中是一个比较大的模块，涉及有AR、INV、PO等模块。<br />  OM包括：客户管理、价格管理、折扣管理、订单流程、其他订单处理、退货管理。这还只是标准功能，还有另外开发两个模块，返利管理、运费管理。这样一算真是巨大的任务了。
          <br/>
          <span style="color:red;">
            <a href="http://jarwang.javaeye.com/blog/214214#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 12 Jul 2008 16:02:22 +0800</pubDate>
        <link>http://jarwang.javaeye.com/blog/214214</link>
        <guid>http://jarwang.javaeye.com/blog/214214</guid>
      </item>
  </channel>
</rss>