<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    將Java進行到底
    將Java進行到底
    posts - 15,  comments - 66,  trackbacks - 0

    Sql優化是一項復雜的工作,以下的一些基本原則是本人看書時所記錄下來的,很明確且沒什么廢話:

    1.  索引的使用:

    1.當插入的數據為數據表中的記錄數量的10%以上,首先需要刪除該表的索引來提高數據的插入效率,當數據插入后,再建立索引。

    2.避免在索引列上使用函數或計算,在where子句中,如果索引是函數的一部分,優化器將不再使用索引而使用全表掃描。如:

    低效:select * from dept where sal*12 >2500;

    高效:select * from dept where sal>2500/12;

    (3).避免在索引列上使用not !=”,索引只能告訴什么存在于表中,而不能告訴什么不存在于表中,當數據庫遇到not !=”時,就會停止使用索引而去執行全表掃描。

    (4).索引列上>=代替>

     低效:select * from emp where deptno > 3

     高效:select * from emp where deptno >=4

    兩者的區別在于,前者dbms將直接跳到第一個deptno等于4的記錄,而后者將首先定位到deptno等于3的記錄并且向前掃描到第一個deptno大于3的。

    (5).非要對一個使用函數的列啟用索引,基于函數的索引是一個較好的方案。

    2. 游標的使用:

       當在海量的數據表中進行數據的刪除、更新、插入操作時,用游標處理的效率是最慢的,但是游標又是必不可少的,所以正確使用游標十分重要:

       (1). 在數據抽取的源表中使用時間戳,這樣每天的維表數據維護只針對更新日期為最新時間的數據來進行,大大減少需要維護的數據記錄數。

       (2). insertupdate維表時都加上一個條件來過濾維表中已經存在的記錄,例如:

    insert into dim_customer select * from ods_customer where ods_customer.code not exists (dim_customer.code)

     ods_customer為數據源表。dim_customer為維表。

       (3). 使用顯式的游標,因為隱式的游標將會執行兩次操作,第一次檢索記錄,第二次檢查too many rows這個exception,而顯式游標不執行第二次操作。

    3.  據抽取和上載時的sql優化:

    (1). Where 子句中的連接順序:

    oracle采用自下而上的順序解析where子句,根據這個原理,表之間的連接必須寫在其他where條件之前,那些可以過濾掉大量記錄的條件必須寫在where子句的末尾。如:

    低效:select * from emp e where sal>5000 and job = ‘manager’ and 25<(select count (*) from emp where mgr=e.empno);

    高效:select * from emp e where 25<(select count(*) from emp where mgr=e.empno) and sal>5000 and job=’manager’;

       (2). 刪除全表時,用truncate 替代 delete,同時注意truncate只能在刪除全表時適用,因為truncateddl而不是dml

       (3). 盡量多使用commit

    只要有可能就在程序中對每個delete,insert,update操作盡量多使用commit,這樣系統性能會因為commit所釋放的資源而大大提高。

       (4). exists替代in ,可以提高查詢的效率。

       (5). not exists 替代 not in

       (6). 優化group by

    提高group by語句的效率,可以將不需要的記錄在group by之前過濾掉。如:

    低效:select job, avg(sal) from emp group by job having job = ‘president’ or job=’manager’;

    高效: select job, avg(sal) from emp having  job=’president’ or job=’manager’ group by job;

       (7). 有條件的使用union-all 替代 union:這樣做排序就不必要了,效率會提高35倍。

       (8). 分離表和索引

           總是將你的表和索引建立在不同的表空間內,決不要將不屬于oracle內部系統的對象存放到system表空間內。同時確保數據表空間和索引表空間置于不同的硬盤控制卡控制的硬盤上。


    轉自:http://blog.csdn.net/eigo/archive/2006/03/02/614157.aspx
    posted @ 2006-03-04 20:34 風蕭蕭 閱讀(470) | 評論 (0)編輯 收藏

    /*
    建表:
    dept:
     deptno(primary key),dname,loc
    emp:
     empno(primary key),ename,job,mgr,sal,deptno
    */

    1 列出emp表中各部門的部門號,最高工資,最低工資
    select max(sal) as 最高工資,min(sal) as 最低工資,deptno from emp group by deptno;

    2 列出emp表中各部門job為'CLERK'的員工的最低工資,最高工資
    select max(sal) as 最高工資,min(sal) as 最低工資,deptno as 部門號 from emp where job = 'CLERK' group by deptno;

    3 對于emp中最低工資小于1000的部門,列出job為'CLERK'的員工的部門號,最低工資,最高工資
    select max(sal) as 最高工資,min(sal) as 最低工資,deptno as 部門號 from emp as b
    where job='CLERK' and 1000>(select min(sal) from emp as a where a.deptno=b.deptno) group by b.deptno

    4 根據部門號由高而低,工資有低而高列出每個員工的姓名,部門號,工資
    select deptno as 部門號,ename as 姓名,sal as 工資 from emp order by deptno desc,sal asc

    5 寫出對上題的另一解決方法
    (請補充)

    6 列出'張三'所在部門中每個員工的姓名與部門號
    select ename,deptno from emp where deptno = (select deptno from emp where ename = '張三')

    7 列出每個員工的姓名,工作,部門號,部門名
    select ename,job,emp.deptno,dept.dname from emp,dept where emp.deptno=dept.deptno

    8 列出emp中工作為'CLERK'的員工的姓名,工作,部門號,部門名
    select ename,job,dept.deptno,dname from emp,dept where dept.deptno=emp.deptno and job='CLERK'

    9 對于emp中有管理者的員工,列出姓名,管理者姓名(管理者外鍵為mgr)
    select a.ename as 姓名,b.ename as 管理者 from emp as a,emp as b where a.mgr is not null and a.mgr=b.empno

    10 對于dept表中,列出所有部門名,部門號,同時列出各部門工作為'CLERK'的員工名與工作
    select dname as 部門名,dept.deptno as 部門號,ename as 員工名,job as 工作 from dept,emp
    where dept.deptno *= emp.deptno and job = 'CLERK'

    11 對于工資高于本部門平均水平的員工,列出部門號,姓名,工資,按部門號排序
    select a.deptno as 部門號,a.ename as 姓名,a.sal as 工資 from emp as a
    where a.sal>(select avg(sal) from emp as b where a.deptno=b.deptno) order by a.deptno

    12 對于emp,列出各個部門中平均工資高于本部門平均水平的員工數和部門號,按部門號排序
    select count(a.sal) as 員工數,a.deptno as 部門號 from emp as a
    where a.sal>(select avg(sal) from emp as b where a.deptno=b.deptno) group by a.deptno order by a.deptno

    13 對于emp中工資高于本部門平均水平,人數多與1人的,列出部門號,人數,按部門號排序
    select count(a.empno) as 員工數,a.deptno as 部門號,avg(sal) as 平均工資 from emp as a
    where (select count(c.empno) from emp as c where c.deptno=a.deptno and c.sal>(select avg(sal) from emp as b where c.deptno=b.deptno))>1
    group by a.deptno order by a.deptno

    14 對于emp中低于自己工資至少5人的員工,列出其部門號,姓名,工資,以及工資少于自己的人數
    select a.deptno,a.ename,a.sal,(select count(b.ename) from emp as b where b.sal<a.sal) as 人數 from emp as a
    where (select count(b.ename) from emp as b where b.sal<a.sal)>5


    轉自:http://blog.csdn.net/woolceo/archive/2006/03/02/614094.aspx

    posted @ 2006-03-04 20:31 風蕭蕭 閱讀(2046) | 評論 (1)編輯 收藏
    在開發部署PORTAL項目時,遇到異常:
    Exception:weblogic.management.ApplicationException: prepare failed for content_repo.jar Module: content_repo.jar Error: Exception preparing module: EJBModule(content_repo.jar,status=NEW) Unable to deploy EJB: content_repo.jar from content_repo.jar: Class not found: com.bea.content.repo.i18n.RepoExceptionTextFormatter java.lang.NoClassDefFoundError: Class not found: com.bea.content.repo.i18n.RepoExceptionTextFormatter at weblogic.ejb20.compliance.EJBComplianceChecker.check([Ljava.lang.Object;)V(EJBComplianceChecker.java:287)

    我在weblogic81 sp3的doc中沒有發現com.bea.content.repo.i18n這個package.

    重新安裝了weblogic sp4,就不再出現這個錯誤了。
    posted @ 2006-02-15 23:14 風蕭蕭 閱讀(622) | 評論 (0)編輯 收藏

    <2006年2月>
    2930311234
    567891011
    12131415161718
    19202122232425
    2627281234
    567891011

    常用鏈接

    留言簿(8)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    相冊

    收藏夾

    myfriends

    opensource

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产精品免费观看| 亚洲AV成人潮喷综合网| 国产1024精品视频专区免费| 全黄a免费一级毛片人人爱| 国产亚洲一区二区手机在线观看 | 嫖丰满老熟妇AAAA片免费看| 免费人成视频在线观看视频| 阿v免费在线观看| 91成人免费观看网站| 亚洲香蕉久久一区二区| 在线视频网址免费播放| 国产又黄又爽又刺激的免费网址 | 亚洲色图综合在线| 亚洲日本国产综合高清| 久久爰www免费人成| 中文字幕无码精品亚洲资源网| 亚洲精品国产av成拍色拍| 亚在线观看免费视频入口| 免费A级毛片在线播放不收费| 思思久久99热免费精品6| 特级淫片国产免费高清视频| 亚洲国产香蕉碰碰人人| 久青草视频在线观看免费| 亚洲AV无码乱码在线观看富二代| 男人扒开添女人下部免费视频| 毛片视频免费观看| 亚洲国产成人精品无码一区二区| 久久国产精品免费视频| 亚洲免费视频网址| 免费一级毛片在播放视频| 久久亚洲免费视频| 中文字幕 亚洲 有码 在线| 亚洲 国产 图片| 久久久精品免费视频| 亚洲色偷偷色噜噜狠狠99| 日本妇人成熟免费中文字幕| 国产精品亚洲专一区二区三区| 国产大片51精品免费观看| 亚欧免费无码aⅴ在线观看| jizzjizz亚洲日本少妇| 国产又大又长又粗又硬的免费视频 |