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

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

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

    瘋狂

    STANDING ON THE SHOULDERS OF GIANTS
    posts - 481, comments - 486, trackbacks - 0, articles - 1
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    Oracle SQL語句處理過程(轉(zhuǎn)載)

    Posted on 2011-04-28 18:01 瘋狂 閱讀(811) 評論(0)  編輯  收藏 所屬分類: database

         一般來說,數(shù)據(jù)庫處理SQL都會(huì)經(jīng)過三個(gè)過程:分析、執(zhí)行、返回結(jié)果,比如COGNOS ReportNet通過拖放式完成表現(xiàn)層后,還是會(huì)自動(dòng)生成SQL,然后將SQL傳遞到ORACLE進(jìn)行處理。

    1。分析

    分析是處理SQL語句的第一步,它是SQL語句處理過程較為重要的一步,它又包含幾個(gè)方面:

    (1)語法分析,oracel是采用數(shù)據(jù)庫常用的自底向上的分析方法,包含檢查語法規(guī)范,命名規(guī)范,它是處理SQL語句中最消耗時(shí)間且代價(jià)最高的步驟,主要表現(xiàn)在綁定變量和存儲(chǔ)過程等方面:

    A.綁定變量:這也是為什么使用在某種情況下綁定變量方式會(huì)比非綁定方式效率和性能高出幾倍,主要是綁定變量只會(huì)編譯一次,隨后就會(huì)把查詢計(jì)劃存儲(chǔ)在一個(gè)共享池里,以便以后獲取和重用這個(gè)查詢計(jì)劃。

    B.存儲(chǔ)過程:存儲(chǔ)過程比一般的SQL語句要快,就是它不用再次編譯,而且還可以利用數(shù)據(jù)庫里許多特性,使得它的速度會(huì)比一般SQL語句快很多

    (2)語義分析,學(xué)過編譯原理的都知道,這一步是非常重要的,ORACLE主要是分析SQL語句格式是否正確,各個(gè)對象是否存在,以及它是否有足夠的權(quán)限執(zhí)行

    (3)視圖轉(zhuǎn)換,它會(huì)將涉及的視圖的查詢語句轉(zhuǎn)換為較為簡單的等效連接表達(dá)式,有些人認(rèn)為視圖一定執(zhí)行速度會(huì)比使用表要快,其實(shí)不一定的,主要具體情況具體分析,只要把這篇文章真正理解,自己分析是不困難的;

    (4)表達(dá)式轉(zhuǎn)換。將復(fù)雜的SQL表達(dá)式轉(zhuǎn)換為相應(yīng)的對基表的查詢語句。寫SQL的標(biāo)準(zhǔn)

    A.不要再WHERE字句中進(jìn)行計(jì)算,如SELECT AT_ID FROM ARTICLE WHERE AT_ID >10*10000 AND AT_ID<(10+1)*10000是不允許的就是這個(gè)原理

    B.注意數(shù)據(jù)類型的匹配

    SELECT BK_ID FROM BOOK WHERE BK_PRICE>30 就比不上SELECT BK_ID FROM BOOK WHERE BK_PRICE>30.00好啦

    (5)選擇優(yōu)化器,學(xué)過編譯原理時(shí)候就知道,使用不用的優(yōu)化器是會(huì)有不同的執(zhí)行效率,當(dāng)然,最好是能根據(jù)批量的SQL自己編一個(gè)特定的優(yōu)化器

    (6)選擇連接方式。INFORMIX就有簡單的歸并連接 和排序-歸并連接技術(shù)之分,主要看是否使用索引的問題。

    (7)選擇連接順序。多表連接,oracle選擇那一個(gè)對表先連接,并選擇源數(shù)據(jù)表

    (8)選擇數(shù)據(jù)搜索路徑,根據(jù)以上條件選擇合適的數(shù)據(jù)搜蘇路徑,如選用全表搜索還是利用索引或是其他方式搜索

    (9)到SQL中為該SQL語句找到一個(gè)共享SQL區(qū),如已經(jīng)有共享SQL區(qū),則直接執(zhí)行共享區(qū)內(nèi)容。

    2。執(zhí)行

       主要在于使用UPDATE和DELETE語句時(shí),必須將行鎖定,以免其他用戶修改。ORACLE先從數(shù)據(jù)庫緩沖區(qū)中尋找是否存在所要的數(shù)據(jù)塊,如果存在,就直接讀或修改,否則從物理文件中讀到數(shù)據(jù)庫緩沖區(qū)中。

    3。返回結(jié)果

       對SELECT 語句需要返回結(jié)果的語句,首先看是否需要排序,需要,則排序后返回給用戶,然后根據(jù)內(nèi)存的大小不同,可以一次取出一行數(shù)據(jù),一可以一次取一組數(shù)據(jù)。這時(shí),可能要用到數(shù)據(jù)結(jié)構(gòu)中的外部排序,并歸排序等算法,所以如內(nèi)存允許的話,盡量大會(huì)提高性能的;

          最后總結(jié)一下經(jīng)用使用的SELECT的處理步驟:

                                          打開游標(biāo)
                                               |
       ---------查看共享SQL區(qū),是否有相同的SQL語句
       |                                       |
       |                                   分析
       |                                       |
       |                                    定義
      ------------------------         |
                                               |
       ------------------------- 綁定變量
       |                                      |
       |                                   捆綁
       --------------- -----------   |
                                              |
                                      并行處理
                                             |
                                     執(zhí)行查詢
                                             |
                                       返回結(jié)果
                                             |
                                      關(guān)閉游標(biāo)

     

    轉(zhuǎn)載:http://blog.csdn.net/wonth/archive/2007/05/06/1598446.aspx

    主站蜘蛛池模板: 亚洲av无码专区在线观看亚| 91手机看片国产永久免费| 亚洲依依成人亚洲社区| 日本红怡院亚洲红怡院最新| 成年在线观看免费人视频草莓| a国产成人免费视频| 免费国产草莓视频在线观看黄| 亚洲日本在线观看网址| 久久精品国产亚洲av麻| 亚洲视频一区二区| 在线观看人成网站深夜免费| 91福利免费体验区观看区| 国产免费阿v精品视频网址| 一级毛片在线完整免费观看| 亚洲乱码中文字幕在线| 亚洲AV无码久久久久网站蜜桃| 亚洲国产成人久久精品动漫| 国产亚洲老熟女视频| 亚洲国产一成久久精品国产成人综合| 成年美女黄网站18禁免费| 国产免费AV片在线播放唯爱网| 久久久免费精品re6| 国产拍拍拍无码视频免费| 国产高潮流白浆喷水免费A片 | 免费无码一区二区| 特级毛片A级毛片100免费播放 | 秋霞人成在线观看免费视频 | 亚洲精品视频免费| 国产a级特黄的片子视频免费| 四虎影院在线免费播放| 在线观看免费a∨网站| 日韩一级视频免费观看| 成年女人免费视频播放体验区| 免费做爰猛烈吃奶摸视频在线观看 | 偷自拍亚洲视频在线观看99| 亚洲丰满熟女一区二区哦| 亚洲国产aⅴ成人精品无吗| 亚洲AV无码一区二区三区性色 | 99久热只有精品视频免费观看17| 久久久免费的精品| 91嫩草免费国产永久入口|