青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

無我

讓內心永遠燃燒著偉大的光明的精神之火!
靈活的思考,嚴謹的實現
豪邁的氣魄、頑強的意志和周全的思考

【轉】從Select語句看Oracle查詢原理

本文轉自http://www.ciotimes.com/infrastructure/sjk/44052.html   CIO時代網(www.ciotimes.com) 

    Select語句可以說是DBA和數據庫開發者在工作中使用最多的語句之一,但這條語句是如何執行?在Oracle數據庫中又是如何運作的呢?今天我們就從一條簡單的Select語句開始,看看Oracle數據庫后臺的運作機制。這對于我們之后的系統管理與故障排除非常有幫助。

  第一步:客戶端把語句發給服務器端執行

  當我們在客戶端執行select語句時,客戶端會把這條SQL語句發送給服務器端,讓服務器端的進程來處理這語句。也就是說,Oracle客戶端是不會做任何的操作,他的主要任務就是把客戶端產生的一些SQL語句發送給服務器端。雖然在客戶端也有一個數據庫進程,但是,這個進程的作用跟服務器上的進程作用事不相同的。服務器上的數據庫進程才會對SQL語句進行相關的處理。不過,有個問題需要說明,就是客戶端的進程跟服務器的進程是一一對應的。也就是說,在客戶端連接上服務器后,在客戶端與服務器端都會形成一個進程,客戶端上的我們叫做客戶端進程;而服務器上的我們叫做服務器進程。所以,由于所有的SQL語句都是服務器進程執行的,所以,有些人把服務器進程形象地比喻成客戶端進程的“影子”。

  第二步:語句解析

  當客戶端把SQL語句傳送到服務器后,服務器進程會對該語句進行解析。同理,這個解析的工作,也是在服務器端所進行的。雖然這只是一個解析的動作,但是,其會做很多“小動作”。

  1. 查詢高速緩存。服務器進程在接到客戶端傳送過來的SQL語句時,不會直接去數據庫查詢。而是會先在數據庫的高速緩存中去查找,是否存在相同語句的執行計劃。如果在數據高速緩存中,剛好有其他人使用這個查詢語句的話,則服務器進程就會直接執行這個SQL語句,省去后續的工作。所以,采用高速數據緩存的話,可以提高SQL語句的查詢效率。一方面是從內存中讀取數據要比從硬盤中的數據文件中讀取數據效率要高,另一方面,也是因為這個語句解析的原因。

  不過這里要注意一點,這個數據緩存跟有些客戶端軟件的數據緩存是兩碼事。有些客戶端軟件為了提高查詢效率,會在應用軟件的客戶端設置數據緩存。由于這些數據緩存的存在,可以提高客戶端應用軟件的查詢效率。但是,若其他人在服務器進行了相關的修改,由于應用軟件數據緩存的存在,導致修改的數據不能及時反映到客戶端上。從這也可以看出,應用軟件的數據緩存跟數據庫服務器的高速數據緩存不是一碼事。

  2. 語句合法性檢查。當在高速緩存中找不到對應的SQL語句時,則數據庫服務器進程就會開始檢查這條語句的合法性。這里主要是對SQL語句的語法進行檢查,看看其是否合乎語法規則。如果服務器進程認為這條SQL語句不符合語法規則的時候,就會把這個錯誤信息,反饋給客戶端。在這個語法檢查的過程中,不會對SQL語句中所包含的表名、列名等等進行SQL他只是語法上的檢查。

  3. 語言含義檢查。若SQL語句符合語法上的定義的話,則服務器進程接下去會對語句中的字段、表等內容進行檢查。看看這些字段、表是否在數據庫中。如果表名與列名不準確的話,則數據庫會就會反饋錯誤信息給客戶端。

  所以,有時候我們寫select語句的時候,若語法與表名或者列名同時寫錯的話,則系統是先提示說語法錯誤,等到語法完全正確后,再提示說列名或表名錯誤。若能夠掌握這個順序的話,則在應用程序排錯的時候,可以節省時間。

  4. 獲得對象解析鎖。當語法、語義都正確后,系統就會對我們需要查詢的對象加鎖。這主要是為了保障數據的一致性,防止我們在查詢的過程中,其他用戶對這個對象的結構發生改變。對于加鎖的原理與方法,我在其他文章中已經有專門敘述,在這里就略過不談了。

  5. 數據訪問權限的核對。當語法、語義通過檢查之后,客戶端還不一定能夠取得數據。服務器進程還會檢查,你所連接的用戶是否有這個數據訪問的權限。若你連接上服務器的用戶不具有數據訪問權限的話,則客戶端就不能夠取得這些數據。故,有時候我們查詢數據的時候,辛辛苦苦地把SQL語句寫好、編譯通過,但是,最后系統返回個 “沒有權限訪問數據”的錯誤信息,讓我們氣半死。這在前端應用軟件開發調試的過程中,可能會碰到。所以,要注意這個問題,數據庫服務器進程先檢查語法與語義,然后才會檢查訪問權限。

  6. 確定最佳執行計劃。當語句與語法都沒有問題,權限也匹配的話,服務器進程還是不會直接對數據庫文件進行查詢。服務器進程會根據一定的規則,對這條語句進行優化。不過要注意,這個優化是有限的。一般在應用軟件開發的過程中,需要對數據庫的sql語言進行優化,這個優化的作用要大大地大于服務器進程的自我優化。所以,一般在應用軟件開發的時候,數據庫的優化是少不了的。

  當服務器進程的優化器確定這條查詢語句的最佳執行計劃后,就會將這條SQL語句與執行計劃保存到數據高速緩存。如此的話,等以后還有這個查詢時,就會省略以上的語法、語義與權限檢查的步驟,而直接執行SQL語句,提高SQL語句處理效率。

  第三步:語句執行

  語句解析只是對SQL語句的語法進行解析,以確保服務器能夠知道這條語句到底表達的是什么意思。等到語句解析完成之后,數據庫服務器進程才會真正的執行這條SQL語句。

  這個語句執行也分兩種情況。一是若被選擇行所在的數據塊已經被讀取到數據緩沖區的話,則服務器進程會直接把這個數據傳遞給客戶端,而不是從數據庫文件中去查詢數據。若數據不在緩沖區中,則服務器進程將從數據庫文件中查詢相關數據,并把這些數據放入到數據緩沖區中。

  這里仍然要注意一點,就是Oracle數據庫中,定義了很多種類的高速緩存。像上面所說的SQL語句緩存與現在講的數據緩存。我們在學習數據庫的時候,需要對這些緩存有一個清晰的認識,并了解各個種類緩存的作用。這對于我們后續數據庫維護與數據庫優化是非常有用的。

  第四步:提取數據

  當語句執行完成之后,查詢到的數據還是在服務器進程中,還沒有被傳送到客戶端的用戶進程。所以,在服務器端的進程中,有一個專門負責數據提取的一段代碼。他的作用就是把查詢到的數據結果返回給用戶端進程,從而完成整個查詢動作。

  從這整個查詢處理過程中,我們在數據庫開發或者應用軟件開發過程中,需要注意以下幾點:

  一是要了解數據庫緩存跟應用軟件緩存是兩碼事情。數據庫緩存只有在數據庫服務器端才存在,在客戶端是不存在的。只有如此,才能夠保證數據庫緩存中的內容跟數據庫文件的內容一致。才能夠根據相關的規則,防止數據臟讀、錯讀的發生。而應用軟件所涉及的數據緩存,由于跟數據庫緩存不是一碼事情,所以,應用軟件的數據緩存雖然可以提高數據的查詢效率,但是,卻打破了數據一致性的要求,有時候會發生臟讀、錯讀等情況的發生。所以,有時候,在應用軟件上有專門一個功能,用來在必要的時候清除數據緩存。不過,這個數據緩存的清除,也只是清除本機上的數據緩存,或者說,只是清除這個應用程序的數據緩存,而不會清除數據庫的數據緩存。

  二是絕大部分SQL語句都是按照這個處理過程處理的。我們DBA或者基于Oracle數據庫的開發人員了解這些語句的處理過程,對于我們進行涉及到SQL語句的開發與調試,是非常有幫助的。有時候,掌握這些處理原則,可以減少我們排錯的時間。特別要注意,數據庫是把數據查詢權限的審查放在語法語義的后面進行檢查的。所以,有時會若光用數據庫的權限控制原則,可能還不能滿足應用軟件權限控制的需要。此時,就需要應用軟件的前臺設置,實現權限管理的要求。而且,有時應用數據庫的權限管理,也有點顯得繁瑣,會增加服務器處理的工作量。因此,對于記錄、字段等的查詢權限控制,大部分程序涉及人員喜歡在應用程序中實現,而不是在數據庫上實現。

posted on 2011-09-15 11:54 Tim 閱讀(314) 評論(0)  編輯 收藏 引用 所屬分類: 數據庫

<2011年8月>
31123456
78910111213
14151617181920
21222324252627
28293031123
45678910

導航

統計

公告

本博客原創文章,歡迎轉載和交流。不過請注明以下信息:
作者:TimWu
郵箱:timfly@yeah.net
來源:www.shnenglu.com/Tim
感謝您對我的支持!

留言簿(9)

隨筆分類(173)

IT

Life

搜索

積分與排名

最新隨筆

最新評論

閱讀排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲人成人一区二区三区| 99re6这里只有精品| 这里是久久伊人| 亚洲国内精品在线| 欧美日韩欧美一区二区| 在线视频欧美日韩精品| 亚洲小视频在线| 在线国产精品播放| 亚洲欧洲日本一区二区三区| 欧美www视频| 亚洲视频一区在线| 性欧美video另类hd性玩具| 亚洲大片免费看| 亚洲免费av片| 狠狠色狠狠色综合人人| 欧美激情第五页| 国产精品久久久久秋霞鲁丝| 久久婷婷丁香| 国产精品成人免费| 久久综合给合久久狠狠色| 欧美福利小视频| 久久久久久久精| 欧美精品乱码久久久久久按摩| 午夜精品影院在线观看| 免费看精品久久片| 午夜日韩在线观看| 欧美**人妖| 久久免费国产精品| 欧美日韩中文| 亚洲第一狼人社区| 国产亚洲va综合人人澡精品| 91久久夜色精品国产九色| 国产精品综合| 亚洲免费观看高清在线观看| 国语自产精品视频在线看抢先版结局| 亚洲三级影院| 亚洲欧洲一区二区三区| 久久狠狠久久综合桃花| 亚洲已满18点击进入久久| 欧美91视频| 欧美岛国在线观看| 国产亚洲一级高清| 亚洲欧美日韩中文在线制服| 亚洲理伦在线| 麻豆精品视频| 免费欧美日韩国产三级电影| 在线播放不卡| 欧美一区二区三区免费观看| 一区二区三区福利| 欧美成人午夜77777| 久久亚洲精品一区| 红桃视频亚洲| 欧美一区二区视频在线| 欧美一区二区三区视频| 欧美性大战久久久久久久| 亚洲二区视频| 亚洲精品视频免费在线观看| 免费成人你懂的| 亚洲国产成人久久综合| 亚洲大胆女人| 久久综合九色九九| 亚洲第一页在线| 亚洲人成人一区二区三区| 免费久久99精品国产自| 欧美激情一区二区三区不卡| 最新热久久免费视频| 欧美韩国日本一区| 亚洲国产精品悠悠久久琪琪| 亚洲精品国精品久久99热一| 欧美二区乱c少妇| 亚洲精品免费在线播放| 日韩小视频在线观看专区| 欧美日韩成人综合天天影院| 日韩亚洲在线| 久久精品九九| 亚洲黄色成人久久久| 欧美日韩精品久久| 国产精品99久久久久久www| 先锋亚洲精品| 在线日韩日本国产亚洲| 免费观看亚洲视频大全| 亚洲精选91| 久久成人国产| 亚洲激情在线观看| 欧美日韩一区成人| 亚洲男女自偷自拍| 狼人天天伊人久久| 在线亚洲伦理| 国内精品久久久久久久果冻传媒| 久久一综合视频| 夜夜嗨av一区二区三区网站四季av | 久久精品国产精品亚洲综合| 欧美黄色片免费观看| 亚洲神马久久| 亚洲国产成人av在线| 欧美日韩亚洲综合一区| 久久国产精彩视频| 亚洲精品乱码久久久久| 久久精彩免费视频| 亚洲最新视频在线| 国户精品久久久久久久久久久不卡| 欧美不卡三区| 午夜宅男久久久| 亚洲精品九九| 久久综合狠狠| 欧美一区亚洲一区| 99国内精品久久| 亚洲电影在线免费观看| 国产精品mv在线观看| 久久综合色婷婷| 性做久久久久久久免费看| 亚洲精品久久久久久久久久久久久 | 久久久久成人精品| 夜夜嗨av一区二区三区四季av| 久久青青草原一区二区| 亚洲手机成人高清视频| 亚洲国产精品久久| 国产亚洲欧洲997久久综合| 欧美视频一区| 欧美破处大片在线视频| 久久香蕉国产线看观看av| 午夜精品一区二区三区在线视 | 亚洲激情国产精品| 欧美高清在线视频| 久久婷婷丁香| 久久免费观看视频| 久久精品视频在线观看| 亚洲欧美日韩国产一区二区三区 | 一本色道久久88精品综合| 亚洲第一搞黄网站| 一区二区三区在线视频免费观看| 国产精品亚洲激情| 国产精品盗摄久久久| 欧美性猛片xxxx免费看久爱| 欧美日本免费| 欧美日韩精品综合| 欧美日韩精品免费观看视频完整| 美日韩丰满少妇在线观看| 玖玖综合伊人| 麻豆成人av| 欧美www视频| 欧美日韩成人在线视频| 欧美日韩视频专区在线播放| 欧美久久一级| 国产精品久久一区主播| 国产欧美在线看| 国产真实乱偷精品视频免| 国产亚洲一区二区三区| 韩国在线视频一区| 亚洲第一成人在线| 99视频精品在线| 亚洲午夜三级在线| 欧美亚洲综合网| 久久久精品五月天| 亚洲第一网站免费视频| 亚洲三级电影全部在线观看高清| 99精品热视频| 亚洲自拍偷拍福利| 久久久精品五月天| 欧美激情网友自拍| 国产精品美女黄网| 精品51国产黑色丝袜高跟鞋| 亚洲经典一区| 亚洲综合日韩在线| 美女精品在线观看| 亚洲裸体在线观看| 午夜日韩在线| 欧美成人一区二区三区片免费| 欧美久久电影| 国产一区二区三区四区hd| 亚洲激情女人| 欧美在线观看视频在线| 亚洲成色777777女色窝| 亚洲一区二区三区精品视频| 久久精品国产77777蜜臀| 欧美日韩精品在线| 悠悠资源网亚洲青| 一区二区久久久久久| 久久久久九九视频| 亚洲精品永久免费| 久久久久国产精品一区三寸| 欧美日韩一区二区三区视频| 狠狠久久亚洲欧美专区| 亚洲网站在线观看| 麻豆精品传媒视频| 一区二区精品| 久久成人免费网| 噜噜噜91成人网| 久久米奇亚洲| 亚洲影视中文字幕| 欧美www视频在线观看| 国产一区二区三区在线观看网站| 99国产精品私拍| 久热成人在线视频| 亚洲综合欧美日韩| 欧美日韩一区二区三区在线| 亚洲二区在线视频| 久久久久久久久一区二区| 在线亚洲美日韩| 欧美片在线观看|