黑豆熊——BlogJava

          面對挑戰,我告訴自己:面對是勇氣,積極面對是態度,堅持積極面對是毅力!

          常用鏈接

          統計

          積分與排名

          最新評論

          sql語句的執行順序--簡介

          今天上午在開發的過程中,突然遇到一個問題,需要了解SQL語句的執行順序才能繼續,上網上查了一下相關的資料,現整理如下:
          一、sql語句的執行步驟:
           1)語法分析,分析語句的語法是否符合規范,衡量語句中各表達式的意義。
          2) 語義分析,檢查語句中涉及的所有數據庫對象是否存在,且用戶有相應的權限。
          3)視圖轉換,將涉及視圖的查詢語句轉換為相應的對基表查詢語句。
          4)表達式轉換, 將復雜的 SQL 表達式轉換為較簡單的等效連接表達式。
           5)選擇優化器,不同的優化器一般產生不同的“執行計劃”
          6)選擇連接方式, ORACLE 有三種連接方式,對多表連接 ORACLE 可選擇適當的連接方式。
          7)選擇連接順序, 對多表連接 ORACLE 選擇哪一對表先連接,選擇這兩表中哪個表做為源數據表。
          8)選擇數據的搜索路徑,根據以上條件選擇合適的數據搜索路徑,如是選用全表搜索還是利用索引或是其他的方式。
          9)運行“執行計劃”
          二、oracle 共享原理:
                  ORACLE將執行過的SQL語句存放在內存的共享池(shared buffer pool)中,可以被所有的數據庫用戶共享 當你執行一個SQL語句(有時被稱為一個游標)時,如果它和之前的執行過的語句完全相同, ORACLE就能很快獲得已經被解析的語句以及最好的 執行路徑. 這個功能大大地提高了SQL的執行性能并節省了內存的使用
          三、oracle 語句提高查詢效率的方法:1: where column in(select * from ... where ...); 2:... where exists (select 'X' from ...where ...); 第二種格式要遠比第一種格式的效率高。在Oracle中可以幾乎將所有的IN操作符子查詢改寫為使用EXISTS的子查詢 使用EXIST,Oracle系統會首先檢查主查詢,然后運行子查詢直到它找到第一個匹配項,這就節省了時間 Oracle系統在執行IN子查詢時,首先執行子查詢,并將獲得的結果列表存放在在一個加了索引的臨時表中 避免使用having字句 避免使用HAVING子句, HAVING 只會在檢索出所有記錄之后才對結果集進行過濾. 這個處理需要排序,總計等操作. 如果能通過WHERE子句限制記錄的數目,那就能減少這方面的開銷

          SQL Select語句完整的執行順序: 

          1、from子句組裝來自不同數據源的數據;
           2、where子句基于指定的條件對記錄行進行篩選;
          3、group by子句將數據劃分為多個分組;
          4、使用聚集函數進行計算;
          5、使用having子句篩選分組;
          6、計算所有的表達式;
          7、使用order by對結果集進行排序。

          posted on 2008-11-28 11:17 黑豆熊 閱讀(9663) 評論(6)  編輯  收藏

          評論

          # re: sql語句的執行順序--簡介 2008-11-28 13:19 charlie's logic

          thx  回復  更多評論   

          # re: sql語句的執行順序--簡介 2008-11-28 21:37 lyoe

          很不錯~后面的知道,前面的那個“執行步驟”以前還真不知道  回復  更多評論   

          # re: sql語句的執行順序--簡介 2009-03-06 09:11 thirdline

          很好!以前了解一點SQL執行順序,現在全忘了.
          今天看到你的文章,真的就回憶起來了,呵呵,謝謝!
          不知道博主是否同意轉載?  回復  更多評論   

          # re: sql語句的執行順序--簡介 2009-06-04 09:22 thebye85

          select 是在什么時候執行的?  回復  更多評論   

          # re: sql語句的執行順序--簡介[未登錄] 2009-10-04 08:30 test

          @thebye85
          最后執行  回復  更多評論   

          # re: sql語句的執行順序--簡介 2011-09-07 18:32 GavinMiao

          頂,不錯!  回復  更多評論   


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 屯留县| 海兴县| 广宗县| 浦北县| 平谷区| 富锦市| 柳河县| 台中县| 广宁县| 东安县| 山阴县| 常宁市| 和平区| 霍山县| 永新县| 平果县| 嘉黎县| 昌江| 南宫市| 龙州县| 富蕴县| 门源| 伊金霍洛旗| 兴仁县| 茂名市| 江北区| 永济市| 专栏| 报价| 化州市| 大安市| 浏阳市| 潜山县| 鄂托克前旗| 长宁区| 乌鲁木齐市| 湾仔区| 郁南县| 余庆县| 台安县| 南汇区|