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

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

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

    將Java進(jìn)行到底
    將Java進(jìn)行到底
    posts - 15,  comments - 66,  trackbacks - 0

    Sql優(yōu)化是一項(xiàng)復(fù)雜的工作,以下的一些基本原則是本人看書時(shí)所記錄下來的,很明確且沒什么廢話:

    1.  索引的使用:

    1.當(dāng)插入的數(shù)據(jù)為數(shù)據(jù)表中的記錄數(shù)量的10%以上,首先需要?jiǎng)h除該表的索引來提高數(shù)據(jù)的插入效率,當(dāng)數(shù)據(jù)插入后,再建立索引。

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

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

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

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

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

     低效:select * from emp where deptno > 3

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

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

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

    2. 游標(biāo)的使用:

       當(dāng)在海量的數(shù)據(jù)表中進(jìn)行數(shù)據(jù)的刪除、更新、插入操作時(shí),用游標(biāo)處理的效率是最慢的,但是游標(biāo)又是必不可少的,所以正確使用游標(biāo)十分重要:

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

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

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

     ods_customer為數(shù)據(jù)源表。dim_customer為維表。

       (3). 使用顯式的游標(biāo),因?yàn)殡[式的游標(biāo)將會(huì)執(zhí)行兩次操作,第一次檢索記錄,第二次檢查too many rows這個(gè)exception,而顯式游標(biāo)不執(zhí)行第二次操作。

    3.  據(jù)抽取和上載時(shí)的sql優(yōu)化:

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

    oracle采用自下而上的順序解析where子句,根據(jù)這個(gè)原理,表之間的連接必須寫在其他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). 刪除全表時(shí),用truncate 替代 delete,同時(shí)注意truncate只能在刪除全表時(shí)適用,因?yàn)?/SPAN>truncateddl而不是dml。

       (3). 盡量多使用commit

    只要有可能就在程序中對(duì)每個(gè)delete,insert,update操作盡量多使用commit,這樣系統(tǒng)性能會(huì)因?yàn)?/SPAN>commit所釋放的資源而大大提高。

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

       (5). not exists 替代 not in

       (6). 優(yōu)化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:這樣做排序就不必要了,效率會(huì)提高35倍。

       (8). 分離表和索引

           總是將你的表和索引建立在不同的表空間內(nèi),決不要將不屬于oracle內(nèi)部系統(tǒng)的對(duì)象存放到system表空間內(nèi)。同時(shí)確保數(shù)據(jù)表空間和索引表空間置于不同的硬盤控制卡控制的硬盤上。


    轉(zhuǎn)自:http://blog.csdn.net/eigo/archive/2006/03/02/614157.aspx
    posted on 2006-03-04 20:34 風(fēng)蕭蕭 閱讀(464) 評(píng)論(0)  編輯  收藏 所屬分類: 雜談

    <2006年3月>
    2627281234
    567891011
    12131415161718
    19202122232425
    2627282930311
    2345678

    常用鏈接

    留言簿(8)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    相冊(cè)

    收藏夾

    myfriends

    opensource

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲欧洲精品成人久久曰| 国产免费久久久久久无码| 免费大香伊蕉在人线国产 | 亚洲av无码成h人动漫无遮挡| 99久9在线|免费| 99亚洲精品卡2卡三卡4卡2卡| 亚洲欧洲日产国码无码网站| 亚洲中文无码永久免费| 特级毛片在线大全免费播放| 亚洲黄色免费在线观看| 免费大黄网站在线观| 毛片无码免费无码播放| 深夜a级毛片免费视频| 亚洲美女视频免费| 久久亚洲高清综合| 成人激情免费视频| 搡女人免费免费视频观看| 亚洲日韩国产一区二区三区在线| 亚洲色成人网站WWW永久| 在线观看免费大黄网站| 91在线老王精品免费播放| 九九久久国产精品免费热6| 亚洲成A∨人片在线观看无码| 久久精品国产亚洲5555| 男女交性永久免费视频播放| 91青青青国产在观免费影视| 国产精品免费久久久久影院 | 亚洲午夜精品一区二区麻豆| 亚洲成AV人片在线播放无码| 日批日出水久久亚洲精品tv| 无限动漫网在线观看免费| 免费看一区二区三区四区| 国产精品无码亚洲一区二区三区| 亚洲特级aaaaaa毛片| 亚洲嫩模在线观看| 在线观看国产区亚洲一区成人 | 亚洲人色婷婷成人网站在线观看 | 国产亚洲精品资源在线26u| 国产成人无码免费视频97| AV免费网址在线观看| av大片在线无码免费|