SQL select語句執行順序

來源:互聯網
上載者:User
今天上午在開發的過程中,突然遇到一個問題,需要瞭解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對結果集進行排序。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.