




已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
弄清楚你的業(yè)務類型OLTP or OLAP在Oracle數據庫系統(tǒng)中,很多人沒有弄清楚自己的業(yè)務類型到底是什么,就在開始盲目的尋求優(yōu)化方法,而往往是把OLAP的方法使用在OLTP上,或者是OLTP的方法使用在OLAP上。這樣的使用,有的時候,對性能沒有任何的提高,甚至是大大的影響了性能,得到適得其反的效果。所以,在優(yōu)化系統(tǒng)之前,弄清楚自己的業(yè)務類型。OLTP (聯(lián)機事務處理系統(tǒng))也稱為面向交易的處理系統(tǒng),其基本特征是顧客的原始數據可以立即傳送到計算中心進行處理,并在很短的時間內給出處理結果。這樣做的最大優(yōu)點是可以即時地處理輸入的數據,及時地回答。也稱為實時系統(tǒng)(Real time System)。衡量聯(lián)機事務處理系統(tǒng)的一個重要性能指標是系統(tǒng)性能,具體體現(xiàn)為實時響應時間(Response Time),即用戶在終端上送入數據之后,到計算機對這個請求給出答復所需要的時間。OLAP(聯(lián)機分析處理系統(tǒng))聯(lián)機分析處理 (OLAP) 的概念最早是由關系數據庫之父E.F.Codd于1993年提出的,他同時提出了關于OLAP的12條準則。OLAP的提出引起了很大的反響,OLAP作為一類產品同聯(lián)機事務處理 (OLTP) 明顯區(qū)分開來。 當今的數據處理大致可以分成兩大類:聯(lián)機事務處理OLTP(on-line transaction processing)、聯(lián)機分析處理OLAP(On-Line Analytical Processing)。OLTP是傳統(tǒng)的關系型數據庫的主要應用,主要是基本的、日常的事務處理,例如銀行交易。OLAP是數據倉庫系統(tǒng)的主要應用,支持復雜的分析操作,側重決策支持,并且提供直觀易懂的查詢結果。 OLTP與OLAP之間的比較:OLTPOLAP用戶操作人員,低層管理人員決策人員,高級管理人員功能日常操作處理分析決策DB 設計面向應用面向主題數據最新的,細節(jié)的,二維的,分立的歷史的,聚集的,多維的,集成的存取規(guī)模讀/寫數條(甚至數百條)記錄讀上百萬(甚至上億)條記錄操作頻度非常頻繁(以秒計)比較稀松(以小時甚至以周計)工作單位嚴格的事務復雜的查詢用戶數數百個-數千萬個數個-數百個DB 大小100MB-GB100GB-TB1、什么是OLTP OLTP,也叫聯(lián)機事務處理(Online Transaction Processing),表示事務性非常高的系統(tǒng),一般都是高可用的在線系統(tǒng),以小的事務以及小的查詢?yōu)橹?,評估其系統(tǒng)的時候,一般看其每秒執(zhí)行的transaction以及execute sql的數量。在這樣的系統(tǒng)中,每秒處理的transaction往往超過幾百個,或者是幾千個,select 語句的執(zhí)行量每秒幾千甚至幾萬個。典型的OLTP系統(tǒng)如電子商務系統(tǒng),銀行,證卷等等,如美國ebay的業(yè)務數據庫,就是很典型的OLTP數據庫。 OLTP系統(tǒng)最容易出現(xiàn)的瓶頸就是CPU與磁盤子系統(tǒng)。cpu則取決于邏輯讀以及內部調用,如函數等等。一個執(zhí)行頻繁的SQL語句,如果每個語句可以減少很少的邏輯讀,也相當于優(yōu)化了一些邏輯讀很差的大型語句。很多人不感覺不到這里的作用,覺得一個語句幾十個邏輯讀,執(zhí)行時間基本為0,就不需要優(yōu)化了,其實,只要他的執(zhí)行次數非常頻繁,而且有優(yōu)化的余地,就一定要優(yōu)化,如減少一定的邏輯讀或者降低執(zhí)行次數,都是優(yōu)化方法。 另外,一些計算性的函數,如sum,count,decode被非常頻繁的使用,也是非常消耗cpu的,我遇到一個系統(tǒng),因為一個sql語句,大量的使用了sum與decode進行行列轉換,結果這一個語句就耗費了整個機器一半以上的CPU。 那么,在一般的OLTP系統(tǒng)中,如果不考慮我上面說的函數問題,那么,邏輯讀乘以執(zhí)行次數,決定了cpu的消耗程度,如一個語句,每秒執(zhí)行次數為500次,每個邏輯讀為15,但是,通過優(yōu)化,能讓每個語句的邏輯讀從15降到10,那么,每秒的邏輯讀就可以減少500*5=2500個,其實就是相當于優(yōu)化了一個執(zhí)行頻率為每秒1次,每次邏輯讀為2500個的語句(注意,2500個邏輯讀,在oltp系統(tǒng)是非常差的語句)。再如,假定一個1GHZ的cpu每秒能正常處理的邏輯讀是100,000個,如果是10個邏輯讀一個的語句,每秒可以處理10,000個,而1000個邏輯讀一個的語句,每秒則只能處理100個。 同以上道理,物理讀乘以執(zhí)行次數,則決定了存儲子系統(tǒng)的處理能力,在一個OLTP環(huán)境中,物理讀一般都是db file sequential read決定的,也就是單塊讀,一個典型的OLTP系統(tǒng),db file sequential read應當基本等于磁盤子系統(tǒng)的讀的IOPS。而磁盤子系統(tǒng)的IOPS處理能力,與cache命中率以及磁盤個數有很大的關系。我的一些文章中,也分析到了這些問題,如一個15K轉速的磁盤,每秒最多能處理的iops達到150個,基本就是極限了,如果cache不命中,那么100個磁盤,最多能處理的IOPS僅僅是15000個(但是,實際上,還基本達不到這個值)。 OLTP最常用的技術就是cache技術與btree索引,cache決定了很多語句不需要從磁盤子系統(tǒng)獲得數據,所以,web cache與oracle data buffer對OLTP系統(tǒng)是很重要的。另外,在索引使用方面,語句是越簡單越好,這樣執(zhí)行計劃也穩(wěn)定,而且一定要使用綁定變量,減少語句解析,盡量減少關聯(lián)。其它方面,基本不使用分區(qū)技術,MV技術,并行技術以及位圖索引,因為并發(fā)量很高,批量更新可能要盡量快速提交避免阻塞的發(fā)生。 在ebay的數據庫設計中,有一個很重要的點就是,數據庫只負責存放數據,業(yè)務邏輯盡量在業(yè)務層實現(xiàn),因為數據庫擴展是困難的,而應用服務器擴展是簡單的。其實,也就是說,在高可用的OLTP環(huán)境中,數據庫使用越簡單的功能越好。2、什么是OLAP OLAP,也叫聯(lián)機分析(Online Analytical Processing),有的時候也叫DSS決策支持系統(tǒng),就是我們說的數據倉庫。在這樣的系統(tǒng)中,語句的執(zhí)行量不是考核標準,因為一個語句的執(zhí)行時間可能會非常長,讀取的數據也非常多。所以,這樣的系統(tǒng)中,考核的標準往往決定于磁盤子系統(tǒng)的吞吐量。 磁盤子系統(tǒng)的吞吐量則直接取決于磁盤的個數,這個時候,cache基本是沒有效果的,這個時候數據庫的讀寫基本上是db file scattered read與direct path read/write。在我前面的一些文章中描述過,如果一個15K的磁盤的IO量每秒13M,那么,100個磁盤,最多能提供的吞吐量則是1300M/s(實際上,也基本達不到這個值)。如果磁盤個數足夠的話,還需要考慮采用比較大的帶寬,如4GB的光纖接口。 在OLAP系統(tǒng)中,常使用的技術有分區(qū)技術,并行技術。如分區(qū)技術可以使得一些大表的掃描變得很快(只掃描單個分區(qū)),而且方便管理。另外,如果分區(qū)結合并行的話,也可以使得整個表的掃描也會變得很快。并行技術除了與分區(qū)技術結合外,在oracle 10g中,與rac結合實現(xiàn)多節(jié)點的同時掃描,效果也非常不錯,把一個任務,如select的全表掃描,平均的分派到多個rac的節(jié)點上去。 在OLAP系統(tǒng)中,不需要使用綁定變量,因為整個系統(tǒng)的執(zhí)行量很少,分析時間對于執(zhí)行時間來說,可以忽略,而且避免出現(xiàn)錯誤的執(zhí)行計劃。但是OLAP中可以大量使用位圖索引,物化視圖,對于大的事務,盡量的尋求速度上的優(yōu)化,沒有必要象OLTP需要快速提交,甚至要刻意減慢執(zhí)行的速度。3、總結 特別是在高可用的OLTP環(huán)境中,不要盲目的把OLAP的技術拿過來用,如分區(qū)技術,如果不是大范圍的使用了分區(qū)關鍵字作為where條件,而采用其它的字段作為where條件,那么,如果是本地索引,你將不得不掃描多個索引,而性能變的更為低下。如果是全局索引,那分區(qū)的意義又何在,只是多出一份分區(qū)技術的license而已。 并行技術也是如此,一般是在大型任務的時候才使用,好比說,實際生活中,一個比較大型的工作,如翻譯一本書,你可以先安排多個人,每個人翻譯不同的章節(jié),這樣是可以提高翻譯速度,但是,你現(xiàn)在只是翻譯一頁,你也去分配不同的人翻譯不同的行,再組合起來,這個時間,你一個人或者早就翻譯完了。 位圖索引在我前幾篇文章中有交代,如果用在oltp環(huán)境中,可能因為阻塞范圍太大,很容易阻塞與死鎖,但是,在olap環(huán)境中,可能會因為其特有的特性,提高olap的查詢速度。mv也是基本一樣,包括觸發(fā)器等等,在dml頻繁的oltp系統(tǒng)上,很容易成為瓶頸,而在olap環(huán)境上,則可能會因為使用恰當而提高查詢速度。/article/62/1187.htmlOracle索引使用限制 和 建議什么是索引索引是建立在表的一列或多個列上的輔助對象,目的是加快訪問表中的數據; Oracle存儲索引的數據結構是B*樹,位圖索引也是如此,只不過是葉子節(jié)點不同B*數索引;索引由根節(jié)點、分支節(jié)點和葉子節(jié)點組成,上級索引塊包含下級索引塊的索引數據,葉節(jié)點包含索引數據和確定行實際位置的rowid。一、oracle的索引陷阱一個表中有幾百萬條數據,對某個字段加了索引,但是查詢時性能并沒有什么提高,這主要可能是oracle的索引限制造成的。 oracle的索引有一些索引限制,在這些索引限制發(fā)生的情況下,即使已經加了索引,oracle還是會執(zhí)行一次全表掃描,查詢的性能不會比不加索引有所提高,反而可能由于數據庫維護索引的系統(tǒng)開銷造成性能更差。下面是一些常見的索引限制問題。1、使用不等于操作符(, !=)下面這種情況,即使在列dept_id有一個索引,查詢語句仍然執(zhí)行一次全表掃描 select * from dept where staff_num 1000; 但是開發(fā)中的確需要這樣的查詢,難道沒有解決問題的辦法了嗎? 有! 通過把用 or 語法替代不等號進行查詢,就可以使用索引,以避免全表掃描:上面的語句改成下面這樣的,就可以使用索引了。 select * from dept shere staff_num 1000; 2、使用 is null 或 is not null使用 is null 或is nuo null也會限制索引的使用,因為數據庫并沒有定義null值。如果被索引的列中有很多null,就不會使用這個索引(除非索引是一個位圖索引,關于位圖索引,會在以后的blog文章里做詳細解釋)。在sql語句中使用null會造成很多麻煩。 解決這個問題的辦法就是:建表時把需要索引的列定義為非空(not null)3、使用函數如果沒有使用基于函數的索引,那么where子句中對存在索引的列使用函數時,會使優(yōu)化器忽略掉這些索引。下面的查詢就不會使用索引: select * from staff where trunc(birthdate) = 01-MAY-82; 但是把函數應用在條件上,索引是可以生效的,把上面的語句改成下面的語句,就可以通過索引進行查找。 select * from staff where birthdate show parameter optimizer_index_cost_adjNAME TYPEVALUE- - -optimizer_index_cost_adj integer 100為了多使用索引,可減小它的值SQL alter system set optimizer_index_cost_adj=10;進一步設置為了進一步優(yōu)化,oracle建議對小表不要建索引,那什么為小表呢,oracle一次I/O就可讀寫完整個表的表為小表,查看oracle10g一次讀寫的數據量SQL show parameter db_file_multiblock_read_countNAME TYPE VALUE- - -db_file_multiblock_read_countinteger 128可見當表小于128k時就不要建索引了二、各種索引使用場合及建議(1)B*Tree索引。常規(guī)索引,多用于oltp系統(tǒng),快速定位行,應建立于高cardinality列(即列的唯一值除以行數為一個很大的值,存在很少的相同值)。Create index indexname on tablename(columnnamecolumnname.)(2)反向索引。B*Tree的衍生產物,應用于特殊場合,在ops環(huán)境加序列增加的列上建立,不適合做區(qū)域掃描。Create index indexname on tablename(columnnamecolumnname.) reverse(3)降序索引。B*Tree的衍生產物,應用于有降序排列的搜索語句中,索引中儲存了降序排列的索引碼,提供了快速的降序搜索。Create index indexname on tablename(columnname DESCcolumnname.)(4)位圖索引。位圖方式管理的索引,適用于OLAP(在線分析)和DSS(決策處理)系統(tǒng),應建立于低cardinality列,適合集中讀取,不適合插入和修改,提供比B*Tree索引更節(jié)省的空間。Create BITMAP index indexname on tablename(columnnamecolumnname.)在實際應用中,如果某個字段的值需要頻繁更新,那么就不適合在它上面創(chuàng)建位圖索引。在位圖索引中,如果你更新或插入其中一條數值為N的記錄,那么相應表中數值為N的記錄(可能成百上千條)全部被Oracle鎖定,這就意味著其它用戶不能同時更新這些數值為N的記錄,其它用戶必須要等第一個用戶提交后,才能獲得鎖,更新或插入數據,bitmap index它主要用于決策支持系統(tǒng)或靜態(tài)數據。(5)函數索引。B*Tree的衍生產物,應用于查詢語句條件列上包含函數的情況,索引中儲存了經過函數計算的索引碼值??梢栽诓恍薷膽贸绦虻幕A上能提高查詢效率。索引創(chuàng)建策略 1.導入數據后再創(chuàng)建索引 2.不需要為很小的表創(chuàng)建索引 3.對于取值范圍很小的字段(比如性別字段)應當建立位圖索引 4.限制表中的索引的數目 5.為索引設置合適的PCTFREE值 6.存儲索引的表空間最好單獨設定 唯一索引和不唯一索引都只是針對B樹索引而言. Oracle最多允許包含32個字段的復合索引 由此估計出一個查詢如果使用某個索引會需要讀入的數據塊塊數。需要讀入的數據塊越多,則 cost 越大,Oracle 也就越有可能不選擇使用 index三、能用唯一索引,一定用唯一索引 能加非空,就加非空約束 一定要統(tǒng)計表的信息,索引的信息,柱狀圖的信息。 聯(lián)合索引的順序不同,影響索引的選擇,盡量將值少的放在前面 只有做到以上四點,數據庫才會正確的選擇執(zhí)行計劃。ORACLE索引介紹與高性能SQL優(yōu)化什么是索引索引是建立在表的一列或多個列上的輔助對象,目的是加快訪問表中的數據;Oracle存儲索引的數據結構是B*樹,位圖索引也是如此,只不過是葉子節(jié)點不同B*數索引;索引由根節(jié)點、分支節(jié)點和葉子節(jié)點組成,上級索引塊包含下級索引塊的索引數據,葉節(jié)點包含索引數據和確定行實際位置的rowid。使用索引的目的加快查詢速度減少I/O操作消除磁盤排序何時使用索引查詢返回的記錄數排序表40%非排序表40%,排序表7%,建議采用并行機制來提高訪問速度,DDS;索引訪問。最常用的方法,包括索引唯一掃描和索引范圍掃描,OLTP;快速完全索引掃描。訪問索引中所有數據塊,結果相當于全表掃描,可以用索引掃描代替全表掃描,例如:Selectserv_id,count(*)fromtg_cdr01groupbyserv_id;評估全表掃描的合法性如何實現(xiàn)并行掃描。永久并行化(不推薦)altertablecustomerparalleldegree8;。單個查詢并行化select/*+full(emp)parallel(emp,8)*/*fromemp;分區(qū)表效果明顯優(yōu)化SQL語句排序排序的操作:。orderby子句。groupby子句。selectdistinct子句。創(chuàng)建索引時。union或minus。排序合并連接如何避免排序。添加索引。在索引中使用distinct子句。避免排序合并連接使用提示進行調整使用提示的原則。語法:/*+hint*/。使用表別名:select/*+index(edept_idx)*/*fromempe。檢驗提示常用的提示。rule。all_rows。first_rows。use_nl。use_hash。use_merge。index。index_asc。no_index。index_desc(常用于使用max內置函數)。index_combine(強制使用位圖索引)。index_ffs(索引快速完全掃描)。use_concat(將查詢中所有or條件使用unionall)。parallel。noparallel。full。ordered(基于成本)調整表連接表連接的類型。等連接where條件中用等式連接;。外部連接(左、右連接)在where條件子句的等式謂詞放置一個(+)來實現(xiàn),例如:selecta.ename,mfromempa,bonusbwherea.ename=b.ename(+);該語句返回所有emp表的記錄;。自連接Selecta.valuetotal,B.valuehard,(A.value-b.value)soft,Round(b.value/a.value)*100,1)percFromv$sysstata,v$sysstatbWherea.statistic#=179andB.statistic#=180;反連接反連接常用于notinornotexists中,是指在查詢中找到的任何記錄都不包含在結果集中的子查詢;不建議使用notinornotexists;。半連接查詢中使用exists,含義:即使在子查詢中返回多條重復的記錄,外部查詢也只返回一條記錄。嵌套循環(huán)連接。被連接表中存在索引的情況下使用;。使用use_nl。hash連接。Hash連接將驅動表加載在內存中,并使用hash技術連接第二個表,提高等連接速度。適合于大表和小表連接;。使用use_hash。排序合并連接。排序合并連接不使用索引。使用原則:連接表子段中不存在可用索引;查詢返回兩個表中大部分的數據快;CBO認為全表掃描比索引掃描執(zhí)行的更快。使用use_merge使用臨時/中間表多個大表關聯(lián)時,可以分別把滿足條件的結果集存放到中間表,然后用中間表關聯(lián);SQL子查詢的調整關聯(lián)與非關聯(lián)子查詢。關聯(lián):子查詢的內部引用的是外部表,每行執(zhí)行一次;。非關聯(lián):子查詢只執(zhí)行一次,存放在內存中。調整notin和notexists語句??梢允褂猛獠窟B接優(yōu)化notin子句,例如:selectenamefromempwheredept_nonotin(selectdept_nofromdeptwheredept_name=Math);改為:selectenamefromemp,deptwhereemp.dept_no=dept.dept_noanddept.dept_nameisnull;使用索引調整SQLOracle為什么不使用索引。檢查被索引的列或組合索引的首列是否出現(xiàn)在PL/SQL語句的WHERE子句中,這是“執(zhí)行計劃”能用到相關索引的必要條件??床捎昧四姆N類型的連接方式。ORACLE的共有SortMergeJoin(SMJ)、HashJoin(HJ)和NestedLoopJoin(NL)。在兩張表連接,且內表的目標列上建有索引時,只有NestedLoop才能有效地利用到該索引。SMJ即使相關列上建有索引,最多只能因索引的存在,避免數據排序過程。HJ由于須做HASH運算,索引的存在對數據查詢速度幾乎沒有影響??催B接順序是否允許使用相關索引。假設表emp的deptno列上有索引,表dept的列deptno上無索引,WHERE語句有emp.deptno=dept.deptno條件。在做NL連接時,emp做為外表,先被訪問,由于連接機制原因,外表的數據訪問方式是全表掃描,emp.deptno上的索引顯然是用不上,最多在其上做索引全掃描或索引快速全掃描。是否用到系統(tǒng)數據字典表或視圖。由于系統(tǒng)數據字典表都未被分析過,可能導致極差的“執(zhí)行計劃”。但是不要擅自對數據字典表做分析,否則可能導致死鎖,或系統(tǒng)性能下降。索引列是否函數的參數。如是,索引在查詢時用不上。是否存在潛在的數據類型轉換。如將字符型數據與數值型數據比較,ORACLE會自動將字符型用to_number()函數進行轉換,從而導致上一種現(xiàn)象的發(fā)生。是否為表和相關的索引搜集足夠的統(tǒng)計數據。對數據經常有增、刪、改的表最好定期對表和索引進行分析,可用SQL語句“analyzetablexxxxcomputestatisticsforallindexes;”。ORACLE掌握了充分反映實際的統(tǒng)計數據,才有可能做出正確的選擇。索引列的選擇性不高。我們假設典型情況,有表emp,共有一百萬行數據,但其中的emp.deptno列,數據只有4種不同的值,如10、20、30、40。雖然emp數據行有很多,ORACLE缺省認定表中列的值是在所有數據行均勻分布的,也就是說每種deptno值各有25萬數據行與之對應。假設SQL搜索條件DEPTNO=10,利用deptno列上的索引進行數據搜索效率,往往不比全表掃描的高。索引列值是否可為空(NULL)。如果索引列值可以是空值,在SQL語句中那些要返回NULL值的操作,將不會用到索引,如COUNT(*),而是用全表掃描。這是因為索引中存儲值不能為全空??词欠裼杏玫讲⑿胁樵儯≒QO)。并行查詢將不會用到索引。如果從以上幾個方面都查不出原因的話,我們只好用采用在語句中加hint的方式強制ORACLE使用最優(yōu)的“執(zhí)行計劃”。hint采用注釋的方式,有行注釋和段注釋兩種方式。如我們想要用到A表的IND_COL1索引的話,可采用以下方式:“SELECT/*+INDEX(AIND_COL1)*/*FROMAWHERECOL1=XXX;如何屏蔽索引語句的執(zhí)行計劃中有不良索引時,可以人為地屏蔽該索引,方法:。數值型:在索引字段上加0,例如select*fromempwhereemp_no+0=v_emp_no;。字符型:在索引字段上加,例如select*fromtg_cdr01wheremsisdn|=v_msisdn;SQLPLUS中的set小節(jié)在寫腳本的時候,往往需要對輸出的格式進行規(guī)范,我們常常用set語句在設置一些需要的格式規(guī)范。下面,列舉了幾個常用的set ,和他們的應用。SQL set echo on-設置運行命令是是否顯示語句SQL set feedback on-設置顯示“已選擇XX行”SQL set colsep | -設置列與列之間的分割符號SQL set pagesize 10-設置每一頁的行數SQL SET SERVEROUTPUT ON-設置允許顯示輸出類似dbms_outputSQL set heading on-設置顯示列名SQL set timing on-設置顯示“已用時間:XXXX”SQL set time on-設置顯示當前時間SQL set autotrace on-設置允許對執(zhí)行的sql進行分析00:38:28 SQL set echo on00:38:37 SQL E:echo.sql00:38:41 SQL select status from v$datafile where rownum set echo off00:38:58 SQL E:echo.sqlSTATUS-SYSTEMONLINEONLINEONLINEONLINE已選擇5行。已用時間: 00: 00: 01.0900:39:08 SQLSQL set feedback onSQL set colsep |SQL set pagesize 10SQL set serveroutput onSQL set heading onSQL set timing onSQL set time on00:54:11 SQL SELECT FILE#, STATUS, ENABLED FROM V$DATAFILE;FILE#|STATUS |ENABLED-|-|-1|SYSTEM |READ WRITE2|ONLINE |READ WRITE3|ONLINE |READ WRITE4|ONLINE |READ WRITE5|ONLINE |READ WRITE6|ONLINE |READ WRITE7|ONLINE |READ WRITEFILE#|STATUS |ENABLED-|-|-9|ONLINE |READ WRITE10|ONLINE |READ WRITE11|ONLINE |READ WRITE12|ONLINE |READ WRITE11 rows selected.Elapsed: 00:00:01.0700:54:34 SQL DECLARE00:55:00 2 BEGIN00:55:00 3 DBMS_OUTPUT.PUT_LINE(=This is dbms_output.put_line!=);00:55:00 4 END;00:55:02 5 /=This is dbms_output.put_line!=PL/SQL procedure successfully completed.Elapsed: 00:00:00.0200:55:05 SQLSQL set autotrace onSQL SELECT E.LAST_NAME, D.DEPARTMENT_NAME, D.LOCATION_ID2 FROM HR.EMPLOYEES E3 JOIN HR.DEPARTMENTS D4 USING (DEPARTMENT_ID);LAST_NAME DEPARTMENT_NAME LOCATION_ID- - -King Executive 1700Kochhar Executive 1700De Haan Executive 1700Hunold IT 1400Ernst IT 1400106 rows selected.Execution Plan-0 SELECT STATEMENT Optimizer=CHOOSE (Cost=5 Card=106 Bytes=3180)1 0 HASH JOIN (Cost=5 Card=106 Bytes=3180)2 1 TABLE ACCESS (FULL) OF DEPARTMENTS (Cost=2 Card=27 Bytes=513)3 1 TABLE ACCESS (FULL) OF EMPLOYEES (Cost=2 Card=107 Bytes=1177)Statistics-7 recursive calls0 db block gets23 consistent gets12 physical reads0 redo size2801 bytes sent via SQL*Net to client580 bytes received via SQL*Net from client9 SQL*Net roundtrips to/from client0 sorts (memory)0 sorts (disk)106 rows processedSQLStart with connect by prior在SELECT命令中使用CONNECT BY和藹START WITH子句可以查詢表中的樹型結構關系。其命令格式如下:SELECT。CONNECT BY PRIOR列名1=列名2|列名1=PRIOR裂名2START WITH;其中:CONNECT BY子句說明每行數據將是按層次順序檢索,并規(guī)定將表中的數據連入樹型結構的關系中。PRIORY運算符必須放置在連接關系的兩列中某一個的前面。對于節(jié)點間的父子關系,PRIOR運算符在一側表示父節(jié)點,在另一側表示子節(jié)點,從而確定查找樹結構是的順序是自頂向下還是自底向上。在連接關系中,除了可以使用列名外,還允許使用列表達式。START WITH子句為可選項,用來標識哪個節(jié)點作為查找樹型結構的根節(jié)點。若該子句被省略,則表示所有滿足查詢條件的行作為根節(jié)點。Start with.Connect By子句遞歸查詢一般用于一個表維護樹形結構的應用。創(chuàng)建示例表:CREATE TABLE TBL_TEST(ID NUMBER,NAME VARCHAR2(100 BYTE),PID NUMBER DEFAULT 0);插入測試數據:INSERT INTO TBL_TEST(ID,NAME,PID) VALUES(1,10,0);INSERT INTO TBL
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 抖音商戶短視頻創(chuàng)意提案評審制度
- BWA-6047-生命科學試劑-MCE
- 江蘇省興化市顧莊區(qū)三校2024-2025學年七上數學期末教學質量檢測模擬試題含解析
- 美發(fā)培訓卷杠課件
- 國際多式聯(lián)運操作規(guī)范與風險管理
- 航空行業(yè)三年發(fā)展報告:國際與國內市場的比較研究
- 2024-2025學年浙江省杭州市濱江區(qū)數學七年級第一學期期末調研試題含解析
- 云南司法警官職業(yè)學院《國畫山水》2023-2024學年第一學期期末試卷
- 河道垃圾清理管理辦法
- 油罐招標采購管理辦法
- 量子信息學導論 課件 第8章 量子度量學
- 勞動器材配備一覽表
- 火電廠危險化學品安全管理課件
- 骨科專業(yè)手外科臨床技術操作規(guī)范2023版
- JB-T 4149-2022 臂式斗輪堆取料機
- 航空航天工程行業(yè)技術發(fā)展與創(chuàng)新趨勢
- 變電一次設備標準缺陷庫
- 監(jiān)理通知回執(zhí)單新
- 三北防護林課件
- 三年級小學英語閱讀理解
- 母嬰保健-助產技術理論考核試題題庫及答案
評論
0/150
提交評論