數(shù)據(jù)庫面試題_第1頁
數(shù)據(jù)庫面試題_第2頁
數(shù)據(jù)庫面試題_第3頁
數(shù)據(jù)庫面試題_第4頁
數(shù)據(jù)庫面試題_第5頁
已閱讀5頁,還剩71頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、-DBA數(shù)據(jù)庫管理員JAVA程序員架構(gòu)師必看數(shù)據(jù)庫根底(面試常見題)一、數(shù)據(jù)庫根底1. 數(shù)據(jù)抽象:物理抽象、概念抽象、視圖級抽象,模式、模式、外模式2. SQL語言包括數(shù)據(jù)定義DDL、數(shù)據(jù)操縱(Data Manipulation)DML,數(shù)據(jù)控制(Data Control)DCL數(shù)據(jù)定義:Create Table,Alter Table,Drop Table, Craete/Drop Inde*等數(shù)據(jù)操縱:Select ,insert,update,delete,數(shù)據(jù)控制:grant,revoke3. SQL常用命令:create table student(id number primary

2、 key,name varchar2(50) not null);/建表create view view_name asselect * from table_name;/建視圖Create UNIQUE INDE* inde*_name ON TableName(col_name);/建索引INSERT INTO tablename column1,column2, values(e*p1,e*p2,);/插入INSERT INTO Viewname column1,column2, values(e*p1,e*p2,);/插入視圖實際影響表UPDATE tablename SET name

3、=zang 3 condition;/更新數(shù)據(jù)DELETE FROM Tablename WHERE condition;/刪除GRANT (Select,delete,) ON (對象) TO USER_NAME WITH GRANT OPTION;/授權(quán)REVOKE (權(quán)限表) ON(對象) FROM USER_NAME WITH REVOKE OPTION /撤權(quán)列出工作人員及其領(lǐng)導(dǎo)的名字:Select E.NAME, S.NAME FROM EMPLOYEE E S WHERE E.SUPERName=S.Name4. 視圖:5. 完整性約束:實體完整性、參照完整性、用戶定義完整性6.

4、 第三式:1NF:每個屬性是不可分的。 2NF:假設(shè)關(guān)系R是NF,且每個非主屬性都完全函數(shù)依賴于R的鍵。例SLC(SID#, CourceID#, SNAME,Grade),則不是2NF; 3NF:假設(shè)R是2NF,且它的任何非鍵屬性都不傳遞依賴于任何候選鍵。7. ER(實體/聯(lián)系)模型8. 索引作用9. 事務(wù):是一系列的數(shù)據(jù)庫操作,是數(shù)據(jù)庫應(yīng)用的根本邏輯單位。事務(wù)性質(zhì):原子性、l 原子性。即不可分割性,事務(wù)要么全部被執(zhí)行,要么就全部不被執(zhí)行。l 一致性或可串性。事務(wù)的執(zhí)行使得數(shù)據(jù)庫從一種正確狀態(tài)轉(zhuǎn)換成另一種正確狀態(tài)l 隔離性。在事務(wù)正確提交之前,不允許把該事務(wù)對數(shù)據(jù)的任何改變提供應(yīng)任何其他事務(wù)

5、,l 持久性。事務(wù)正確提交后,其結(jié)果將永久保存在數(shù)據(jù)庫中,即使在事務(wù)提交后有了其他故障,事務(wù)的處理結(jié)果也會得到保存。10. 鎖:共享鎖、互斥鎖 兩段鎖協(xié)議:階段:加鎖階段 階段:解鎖階段11. 死鎖及處理:事務(wù)循環(huán)等待數(shù)據(jù)鎖,則會死鎖。 死鎖處理:預(yù)防死鎖協(xié)議,死鎖恢復(fù)機制12. 存儲過程:存儲過程就是編譯好了的一些sql語句。1.存儲過程因為SQL語句已經(jīng)預(yù)編繹過了,因此運行的速度比擬快。2. 可保證數(shù)據(jù)的平安性和完整性。通過存儲過程可以使沒有權(quán)限的用戶在控制之下間接地存取數(shù)據(jù)庫,從而保證數(shù)據(jù)的平安。通過存儲過程可以使相關(guān)的動作在一起發(fā)生,從而可以維護數(shù)據(jù)庫的完整性。3.可以降低網(wǎng)絡(luò)的通信量

6、。存儲過程主要是在效勞器上運行,減少對客戶機的壓力。4:存儲過程可以承受參數(shù)、輸出參數(shù)、返回單個或多個結(jié)果集以及返回值??梢韵虺绦蚍祷劐e誤原因5:存儲過程可以包含程序流、邏輯以及對數(shù)據(jù)庫的查詢。同時可以實體封裝和隱藏了數(shù)據(jù)邏輯。   13. 觸發(fā)器: 當(dāng)滿足觸發(fā)器條件,則系統(tǒng)自動執(zhí)行觸發(fā)器的觸發(fā)體。觸發(fā)時間:有before,after.觸發(fā)事件:有insert,update,delete三種。觸發(fā)類型:有行觸發(fā)、語句觸發(fā)14.聯(lián)接,外聯(lián)接區(qū)別?連接是保證兩個表中所有的行都要滿足連接條件,而外連接則不然。在外連接中,*些不滿條件的列也會顯示出來,也就是說,只限制其中一個表的行

7、,而不限制另一個表的行。分左連接、右連接、全連接三種SQL試題2                                            

8、0;                        一、教師號星期號是否有課有有有有有寫一條sql語句讓你變?yōu)檫@樣的表教師號星期一星期二星期三各星期下的數(shù)字表示:對應(yīng)的教師在星期幾已經(jīng)排的課數(shù)二、書表(books)book_id,book_name,creatdate,Lastmodifydate,decription001,三個人的世界,2005-02-0

9、2,2005-07-07,NULL作者表(authors)A_id,A_name01,王紛02,尚03,泰和部門表(depts)d_id,d_name001,編輯一部002,編輯二部003,編輯三部書和作者關(guān)聯(lián)表(bookmap)book_id,A_id001,01001,02001,03部門和作者關(guān)聯(lián)表(depmap)d_id,a_id001,01002,02003,03找出每個部門的所寫的總書兩,比方,一本書有3個人寫,如果三個人在不同的部門,則每個部門的總數(shù)量就是1.最后結(jié)果如下:部門,書量編輯一部,1編輯二部,1編輯三部,1三、兩個表情況表名:wu_plan ID  

10、;    plan      model       corp_code     plannum     pri*is1       00001     e*22         nokia 

11、;       2000         02       00002     lc001         sony         3000     

12、;    0表名:wu_bomID     plan       pact          amount    1      00001      aa1       

13、     3002      00001      aa2            2003      00002      bb1          

14、  5004      00002      bb2            8005      00002      bb3            400查詢這兩個表中p

15、lan唯一,每一個plan中,amount最少的,plannum大于pri*is的記錄結(jié)果是:ID      plan      model       corp_code     plannum     pri*is     pact   amount1   

16、0;   00001     e*22         nokia        2000         0       a2       2002   &#

17、160;   00002     lc001         sony         3000         0       bb3      400四、表1構(gòu)造如下:部門 條碼 品名

18、銷售額 銷售數(shù)量 銷售日期表2構(gòu)造如下課別 部門要求:先按部門排序,再按銷售額、銷售數(shù)量排序檢索出*個課別每個部門一個時期的商品銷售額的前三名,如查詢01課別2007年4月15日到2007年4月22日每個部門一個周的商品銷售額合計的前三名SQL 面試題目匯總1觸發(fā)器的作用?  答:觸發(fā)器是一中特殊的存儲過程,主要是通過事件來觸發(fā)而被執(zhí)行的。它可以強化約束,來維護數(shù)據(jù)的完整性和一致性,可以跟蹤數(shù)據(jù)庫的操作從而不允許未經(jīng)許可的更新和變化??梢月?lián)級運算。如,*表上的觸發(fā)器上包含對另一個表的數(shù)據(jù)操作,而該操作又會導(dǎo)致該表觸發(fā)器被觸發(fā)。2。什么是存儲過程?用什么來調(diào)用?答:存儲過程是

19、一個預(yù)編譯的SQL語句,優(yōu)點是允許模塊化的設(shè)計,就是說只需創(chuàng)立一次,以后在該程序中就可以調(diào)用屢次。如果*次操作需要執(zhí)行屢次SQL,使用存儲過程比單純SQL語句執(zhí)行要快??梢杂靡粋€命令對象來調(diào)用存儲過程。3。索引的作用?和它的優(yōu)點缺點是什么?答:索引就一種特殊的查詢表,數(shù)據(jù)庫的搜索引擎可以利用它加速對數(shù)據(jù)的檢索。它很類似與現(xiàn)實生活中書的目錄,不需要查詢整本書容就可以找到想要的數(shù)據(jù)。索引可以是唯一的,創(chuàng)立索引允許指定單個列或者是多個列。缺點是它減慢了數(shù)據(jù)錄入的速度,同時也增加了數(shù)據(jù)庫的尺寸大小。3。什么是存泄漏?答:一般我們所說的存泄漏指的是堆存的泄漏。堆存是程序從堆中為其分配的,大小任意的,使用

20、完后要顯示釋放存。當(dāng)應(yīng)用程序用關(guān)鍵字new等創(chuàng)立對象時,就從堆中為它分配一塊存,使用完后程序調(diào)用free或者delete釋放該存,否則就說該存就不能被使用,我們就說該存被泄漏了。4。維護數(shù)據(jù)庫的完整性和一致性,你喜歡用觸發(fā)器還是自寫業(yè)務(wù)邏輯?為什么?答:我是這樣做的,盡可能使用約束,如check,主鍵,外鍵,非空字段等來約束,這樣做效率最高,也最方便。其次是使用觸發(fā)器,這種方法可以保證,無論什么業(yè)務(wù)系統(tǒng)訪問數(shù)據(jù)庫都可以保證數(shù)據(jù)的完整新和一致性。最后考慮的是自寫業(yè)務(wù)邏輯,但這樣做麻煩,編程復(fù)雜,效率低下。5。什么是事務(wù)?什么是鎖?答:事務(wù)就是被綁定在一起作為一個邏輯工作單元的SQL語句分組,如果

21、任何一個語句操作失敗則整個操作就被失敗,以后操作就會回滾到操作前狀態(tài),或者是上有個節(jié)點。為了確保要么執(zhí)行,要么不執(zhí)行,就可以使用事務(wù)。要將有組語句作為事務(wù)考慮,就需要通過ACID測試,即原子性,一致性,隔離性和持久性。  鎖:在所以的DBMS中,鎖是實現(xiàn)事務(wù)的關(guān)鍵,鎖可以保證事務(wù)的完整性和并發(fā)性。與現(xiàn)實生活中鎖一樣,它可以使*些數(shù)據(jù)的擁有者,在*段時間不能使用*些數(shù)據(jù)或數(shù)據(jù)構(gòu)造。當(dāng)然鎖還分級別的。6。什么叫視圖?游標(biāo)是什么?答:視圖是一種虛擬的表,具有和物理表一樣的功能??梢詫σ晥D進展增,改,查,操作,試圖通常是有一個表或者多個表的行或列的子集。對視圖的修改不影響根本表。它

22、使得我們獲取數(shù)據(jù)更容易,相比多表查詢。  游標(biāo):是對查詢出來的結(jié)果集作為一個單元來有效的處理。游標(biāo)可以定在該單元中的特定行,從結(jié)果集的當(dāng)前行檢索一行或多行??梢詫Y(jié)果集當(dāng)前行做修改。一般不使用游標(biāo),但是需要逐條處理數(shù)據(jù)的時候,游標(biāo)顯得十分重要。7。為管理業(yè)務(wù)培訓(xùn)信息,建立3個表:     S(S#,SN,SD,SA)S#,SN,SD,SA分別代表*,學(xué)員,所屬單位,學(xué)員年齡     C(C#,)C#,分別代表課程編號,課程名稱    &

23、#160; SC(S#,C#,G) S#,C#,G分別代表*,所選的課程編號,學(xué)習(xí)成績    1使用標(biāo)準(zhǔn)SQL嵌套語句查詢選修課程名稱為稅收根底的學(xué)員*和"          答案:select s# ,sn from s where S# in(select S# from c,sc where c.c#=sc.c# and=稅收根底)      (2) 使用標(biāo)準(zhǔn)SQL嵌套語

24、句查詢選修課程編號為C2的學(xué)員和所屬單位"答:select sn,sd from s,sc where s.s#=sc.s# and sc.c#=c2      (3) 使用標(biāo)準(zhǔn)SQL嵌套語句查詢不選修課程編號為C5的學(xué)員和所屬單位"答:select sn,sd from s where s# not in(select s# from sc where c#=c5)       (4)查詢選修了課程的學(xué)員人數(shù)答:select 學(xué)員人數(shù)=coun

25、t(distinct s#) from sc       (5) 查詢選修課程超過5門的學(xué)員*和所屬單位"答:select sn,sd from s where s# in(select s# from sc group by s# having count(distinct c#)>5)目前在職場中很難找到非常合格的數(shù)據(jù)庫開發(fā)人員。有人說:"SQL開發(fā)是一門語言,它很容易學(xué),但是很難掌握。 華為在面試過程中屢次碰到兩道SQL查詢的題目,一是查詢A(ID,Name)表中第31至40條記錄,ID作為主

26、鍵可能是不是連續(xù)增長的列,完整的查詢語句如下:select top 10 * from A where ID >(select ma*(ID) from (select top 30 ID from A order by A ) T) order by A另外一道題目的要查詢表A中存在ID重復(fù)三次以上的記錄,完整的查詢語句如下:select * from(select count(ID) as count from table group by ID)T where T.count>3以上兩道題目非常有代表意義,望各位把自己碰到的有代表的查詢都貼上來。create table te

27、sttable1(id int IDENTITY,department varchar(12) )select * from testtable1insert into testtable1 values('設(shè)計')insert into testtable1 values('市場')insert into testtable1 values('售后')/*結(jié)果id department1   設(shè)計2   市場3   售后 */create table testtable2(id int

28、 IDENTITY,dptID int,name varchar(12)insert into testtable2 values(1,'三')insert into testtable2 values(1,'四')insert into testtable2 values(2,'王五')insert into testtable2 values(3,'六')insert into testtable2 values(4,'七')/*用一條SQL語句,怎么顯示如下結(jié)果id dptID department name

29、1   1      設(shè)計        三2   1      設(shè)計        四3   2      市場        王五4   3 &#

30、160;    售后        六5   4      黑人        七*/答案是:SELECT testtable2.* , ISNULL(department,'黑人')FROM testtable1 right join testtable2 on testtable2.dptID = testtable1.ID在面試應(yīng)聘的S

31、QL Server數(shù)據(jù)庫開發(fā)人員時,我運用了一套標(biāo)準(zhǔn)的基準(zhǔn)技術(shù)問題。下面這些問題是我覺得能夠真正有助于淘汰不合格應(yīng)聘者的問題。它們按照從易到難的順序排列。當(dāng)你問到關(guān)于主鍵和外鍵的問題時,后面的問題都十分有難度,因為答案可能會更難解釋和說明,尤其是在面試的情形下。你能向我簡要表達一下SQL Server 2000中使用的一些數(shù)據(jù)庫對象嗎"你希望聽到的答案包括這樣一些對象:表格、視圖、用戶定義的函數(shù),以及存儲過程;如果他們還能夠提到像觸發(fā)器這樣的對象就更好了。如果應(yīng)聘者不能答復(fù)這個根本的問題,則這不是一個好兆頭。NULL是什么意思"NULL(空)這個值是數(shù)據(jù)庫世界里一個非常難纏

32、的東西,所以有不少應(yīng)聘者會在這個問題上跌跟頭您也不要覺得意外。NULL這個值表示UNKNOWN(未知):它不表示"(空字符串)。假設(shè)您的SQL Server數(shù)據(jù)庫里有ANSI_NULLS,當(dāng)然在默認情況下會有,對NULL這個值的任何比擬都會生產(chǎn)一個NULL值。您不能把任何值與一個 UNKNOWN值進展比擬,并在邏輯上希望獲得一個答案。您必須使用IS NULL操作符。什么是索引"SQL Server 2000里有什么類型的索引"任何有經(jīng)歷的數(shù)據(jù)庫開發(fā)人員都應(yīng)該能夠很輕易地答復(fù)這個問題。一些經(jīng)歷不太多的開發(fā)人員能夠答復(fù)這個問題,但是有些地方會說不清楚。簡單地說,索引是

33、一個數(shù)據(jù)構(gòu)造,用來快速訪問數(shù)據(jù)庫表格或者視圖里的數(shù)據(jù)。在SQL Server里,它們有兩種形式:聚集索引和非聚集索引。聚集索引在索引的葉級保存數(shù)據(jù)。這意味著不管聚集索引里有表格的哪個(或哪些)字段,這些字段都會按順序被保存在表格。由于存在這種排序,所以每個表格只會有一個聚集索引。非聚集索引在索引的葉級有一個行標(biāo)識符。這個行標(biāo)識符是一個指向磁盤上數(shù)據(jù)的指針。它允許每個表格有多個非聚集索引。什么是主鍵"什么是外鍵"主鍵是表格里的(一個或多個)字段,只用來定義表格里的行;主鍵里的值總是唯一的。外鍵是一個用來建立兩個表格之間關(guān)系的約束。這種關(guān)系一般都涉及一個表格里的主鍵字段與另外一

34、個表格(盡管可能是同一個表格)里的一系列相連的字段。則這些相連的字段就是外鍵。什么是觸發(fā)器"SQL Server 2000有什么不同類型的觸發(fā)器"讓未來的數(shù)據(jù)庫開發(fā)人員知道可用的觸發(fā)器類型以及如何實現(xiàn)它們是非常有益的。觸發(fā)器是一種專用類型的存儲過程,它被捆綁到SQL Server 2000的表格或者視圖上。在SQL Server 2000里,有INSTEAD-OF和AFTER兩種觸發(fā)器。INSTEAD-OF觸發(fā)器是替代數(shù)據(jù)操控語言(Data Manipulation Language,DML)語句對表格執(zhí)行語句的存儲過程。例如,如果我有一個用于TableA的INSTEAD-

35、OF-UPDATE觸發(fā)器,同時對這個表格執(zhí)行一個更新語句,則INSTEAD-OF-UPDATE觸發(fā)器里的代碼會執(zhí)行,而不是我執(zhí)行的更新語句則不會執(zhí)行操作。AFTER觸發(fā)器要在DML語句在數(shù)據(jù)庫里使用之后才執(zhí)行。這些類型的觸發(fā)器對于監(jiān)視發(fā)生在數(shù)據(jù)庫表格里的數(shù)據(jù)變化十分好用。您如何確一個帶有名為Fld1字段的TableB表格里只具有Fld1字段里的那些值,而這些值同時在名為TableA的表格的Fld1字段里"這個與關(guān)系相關(guān)的問題有兩個可能的答案。第一個答案(而且是您希望聽到的答案)是使用外鍵限制。外鍵限制用來維護引用的完整性。它被用來確保表格里的字段只保存有已經(jīng)在不同的(或者一樣的)表格

36、里的另一個字段里定義了的值。這個字段就是候選鍵(通常是另外一個表格的主鍵)。另外一種答案是觸發(fā)器。觸發(fā)器可以被用來保證以另外一種方式實現(xiàn)與限制一樣的作用,但是它非常難設(shè)置與維護,而且性能一般都很糟糕。由于這個原因,微軟建議開發(fā)人員使用外鍵限制而不是觸發(fā)器來維護引用的完整性。對一個投入使用的在線事務(wù)處理表格有過多索引需要有什么樣的性能考慮"你正在尋找進展與數(shù)據(jù)操控有關(guān)的應(yīng)聘人員。對一個表格的索引越多,數(shù)據(jù)庫引擎用來更新、插入或者刪除數(shù)據(jù)所需要的時間就越多,因為在數(shù)據(jù)操控發(fā)生的時候索引也必須要維護。你可以用什么來確保表格里的字段只承受特定圍里的值"這個問題可以用多種方式來答復(fù),

37、但是只有一個答案是"好答案。您希望聽到的答復(fù)是Check限制,它在數(shù)據(jù)庫表格里被定義,用來限制輸入該列的值。觸發(fā)器也可以被用來限制數(shù)據(jù)庫表格里的字段能夠承受的值,但是這種方法要求觸發(fā)器在表格里被定義,這可能會在*些情況下影響到性能。因此,微軟建議使用Check限制而不是其他的方式來限制域的完整性。如果應(yīng)聘者能夠正確地答復(fù)這個問題,則他的時機就非常大了,因為這說明他們具有使用存儲過程的經(jīng)歷。返回參數(shù)總是由存儲過程返回,它用來表示存儲過程是成功還是失敗。返回參數(shù)總是INT數(shù)據(jù)類型。OUTPUT參數(shù)明確要求由開發(fā)人員來指定,它可以返回其他類型的數(shù)據(jù),例如字符型和數(shù)值型的值。(可以用作輸出參

38、數(shù)的數(shù)據(jù)類型是有一些限制的。)您可以在一個存儲過程里使用多個OUTPUT參數(shù),而您只能夠使用一個返回參數(shù)。什么是相關(guān)子查詢"如何使用這些查詢"經(jīng)歷更加豐富的開發(fā)人員將能夠準(zhǔn)確地描述這種類型的查詢。相關(guān)子查詢是一種包含子查詢的特殊類型的查詢。查詢里包含的子查詢會真正請求外部查詢的值,從而形成一個類似于循環(huán)的狀況。數(shù)據(jù)庫面試一:SQL tuning 類1.       列舉幾種表連接方式Answer:等連接連接、非等連接、自連接、外連接左、右、全Or hash join/merge join/nest loop(clu

39、ster join)/inde* join ?ORACLE 8i,9i 表連接方法。一般的相等連接: select * from a, b where a.id = b.id; 這個就屬于連接。對于外連接:Oracle中可以使用"(+) 來表示,9i可以使用LEFT/RIGHT/FULL OUTER JOINLEFT OUTER JOIN:左外關(guān)聯(lián)SELECT e.last_name, e.department_id, d.department_nameFROM employees eLEFT OUTER JOIN departments dON (e.department_id =

40、 d.department_id);等價于SELECT e.last_name, e.department_id, d.department_nameFROM employees e, departments dWHERE e.department_id=d.department_id(+)結(jié)果為:所有員工及對應(yīng)部門的記錄,包括沒有對應(yīng)部門編號department_id的員工記錄。RIGHT OUTER JOIN:右外關(guān)聯(lián)SELECT e.last_name, e.department_id, d.department_nameFROM employees eRIGHT OUTER JOIN

41、departments dON (e.department_id = d.department_id);等價于SELECT e.last_name, e.department_id, d.department_nameFROM employees e, departments dWHERE e.department_id(+)=d.department_id結(jié)果為:所有員工及對應(yīng)部門的記錄,包括沒有任何員工的部門記錄。FULL OUTER JOIN:全外關(guān)聯(lián)SELECT e.last_name, e.department_id, d.department_nameFROM employees

42、eFULL OUTER JOIN departments dON (e.department_id = d.department_id);結(jié)果為:所有員工及對應(yīng)部門的記錄,包括沒有對應(yīng)部門編號department_id的員工記錄和沒有任何員工的部門記錄。ORACLE8i是不直接支持完全外連接的語法,也就是說不能在左右兩個表上同時加上(+),下面是在ORACLE8i可以參考的完全外連接語法select t1.id,t2.id from table1 t1,table t2 where t1.id=t2.id(+)unionselect t1.id,t2.id from table1 t1,tab

43、le t2 where t1.id(+)=t2.id連接類型定義圖示例子連接只連接匹配的行select A.c1,B.c2 from A join B on A.c3 = B.c3;左外連接包含左邊表的全部行不管右邊的表中是否存在與它們匹配的行以及右邊表中全部匹配的行select A.c1,B.c2 from A left join B on A.c3 = B.c3;右外連接包含右邊表的全部行不管左邊的表中是否存在與它們匹配的行以及左邊表中全部匹配的行select A.c1,B.c2 from A right join B on A.c3 = B.c3;全外連接包含左、右兩個表的全部行,不管在

44、另一邊的表中是否存在與它們匹配的行select A.c1,B.c2 from A full join B on A.c3 = B.c3;theta連接使用等值以外的條件來匹配左、右兩個表中的行select A.c1,B.c2 from A join B on A.c3 != B.c3;穿插連接生成笛卡爾積它不使用任何匹配或者選取條件,而是直接將一個數(shù)據(jù)源中的每個行與另一個數(shù)據(jù)源的每個行一一匹配select A.c1,B.c2 from A,B;2.       不借助第三方工具,怎樣查看sql的執(zhí)行方案I) 使用E*plain Pla

45、n,查詢PLAN_TABLE;   E*PLAIN   PLAN      SET STATEMENT_ID='QUERY1'      FOR      SELECT *      FROM a      WHERE aa=1;   SELECT  &

46、#160; operation, options, object_name, object_type, ID, parent_id       FROM plan_table      WHERE STATEMENT_ID = 'QUERY1'   ORDER BY ID;II)SQLPLUS中的SET TRACE 即可看到E*ecution Plan Statistics   SET AUTOTRACE ON;3. &

47、#160;     如何使用CBO,CBO與RULE的區(qū)別   IF 初始化參數(shù) OPTIMIZER_MODE = CHOOSE THEN   -(8I DEFAULT)      IF 做過表分析         THEN 優(yōu)化器 Optimizer=CBO(COST);         

48、0; /*高效*/      ELSE優(yōu)化器 Optimizer=RBO(RULE);                /*高效*/      END IF;   END IF;   區(qū)別:   RBO根據(jù)規(guī)則選擇最正確執(zhí)行路徑來運行查詢。   CBO根據(jù)表統(tǒng)計找到最低本

49、錢的訪問數(shù)據(jù)的方法確定執(zhí)行方案。   使用CBO需要注意:   I)   需要經(jīng)常對表進展ANALYZE命令進展分析統(tǒng)計;   II) 需要穩(wěn)定執(zhí)行方案;   III)需要使用提示(Hint);   使用RULE需要注意:I)   選擇最有效率的表名順序II) 優(yōu)化SQL的寫法;在optimizer_mode=choose時,如果表有統(tǒng)計信息分區(qū)表外,優(yōu)化器將選擇CBO,否則選RBO。RBO遵循簡單的分級方法學(xué),使用15種級別要點,當(dāng)接收到查詢,優(yōu)化器將評

50、估使用到的要點數(shù)目,然后選擇最正確級別最少的數(shù)量的執(zhí)行路徑來運行查詢。CBO嘗試找到最低本錢的訪問數(shù)據(jù)的方法,為了最大的吞吐量或最快的初始響應(yīng)時間,計算使用不同的執(zhí)行方案的本錢,并選擇本錢最低的一個,關(guān)于表的數(shù)據(jù)容的統(tǒng)計被用于確定執(zhí)行方案。4.       如何定位重要(消耗資源多)的SQL使用CPU多的用戶sessionSELECT a.SID, spid, status, SUBSTR (gram, 1, 40) prog, a.terminal,a.SQL_TE*T, osuser, VALUE / 60 / 100

51、VALUEFROM v$session a, v$process b, v$sesstat cWHERE c.statistic# = 12 AND c.SID = a.SID AND a.paddr = b.addrORDER BY VALUE DESC;select sql_te*t from v$sqlwhere disk_reads > 1000 or (e*ecutions > 0 and buffer_gets/e*ecutions > 30000);5.       如何跟蹤*個

52、session的SQL利用TRACE 跟蹤   ALTER SESSION SET SQLTRACE ON;   COLUMN SQL format a200;   SELECT    machine, sql_te*t SQL       FROM v$sqlte*t a, v$session b      WHERE address = sql_address   

53、;     AND machine = '&A'   ORDER BY hash_value, piece;e*ec dbms_system.set_sql_trace_in_session(sid,serial#,&sql_trace);select sid,serial# from v$session where sid = (select sid from v$mystat where rownum = 1);e*ec dbms_system.set_ev(&sid,&am

54、p;amp;serial#,&event_10046,&level_12,'');6.       SQL調(diào)整最關(guān)注的是什么檢查系統(tǒng)的I/O問題sard能檢查整個系統(tǒng)的iostatIO statistics查看該SQL的response time(db block gets/consistent gets/physical reads/sorts (disk)7.       說說你對索引的認識索引的構(gòu)造、對dml影響、對查詢影

55、響、為什么提高查詢性能索引有B-TREE、BIT、CLUSTER等類型。ORACLE使用了一個復(fù)雜的自平衡B-tree構(gòu)造;通常來說,在表上建立恰當(dāng)?shù)乃饕樵儠r會改良查詢性能。但在進展插入、刪除、修改時,同時會進展索引的修改,在性能上有一定的影響。有索引且查詢條件能使用索引時,數(shù)據(jù)庫會先度取索引,根據(jù)索引容和查詢條件,查詢出ROWID,再根據(jù)ROWID取出需要的數(shù)據(jù)。由于索引容通常比全表容要少很多,因此通過先讀索引,能減少I/O,提高查詢性能。b-tree inde*/bitmap inde*/function inde*/patitional inde*(local/global)索引通常

56、能提高select/update/delete的性能,會降低insert的速度,8.       使用索引查詢一定能提高查詢的性能嗎?為什么通常,通過索引查詢數(shù)據(jù)比全表掃描要快.但是我們也必須注意到它的代價.索引需要空間來存儲,也需要定期維護, 每當(dāng)有記錄在表中增減或索引列被修改時,索引本身也會被修改. 這意味著每條記錄的INSERT,DELETE,UPDATE將為此多付出4,5 次的磁盤I/O. 因為索引需要額外的存儲空間和處理,那些不必要的索引反而會使查詢反響時間變慢.使用索引查詢不一定能提高查詢性能,索引圍查詢(INDE* RA

57、NGE SCAN)適用于兩種情況:基于一個圍的檢索,一般查詢返回結(jié)果集小于表中記錄數(shù)的30%宜采用;基于非唯一性索引的檢索索引就是為了提高查詢性能而存在的,如果在查詢中索引沒有提高性能,只能說是用錯了索引,或者講是場合不同9.       綁定變量是什么?綁定變量有什么優(yōu)缺點?綁定變量是指在SQL語句中使用變量,改變變量的值來改變SQL語句的執(zhí)行結(jié)果。優(yōu)點:使用綁定變量,可以減少SQL語句的解析,能減少數(shù)據(jù)庫引擎消耗在SQL語句解析上的資源。提高了編程效率和可靠性。減少訪問數(shù)據(jù)庫的次數(shù), 就能實際上減少ORACLE的工作量。缺點:經(jīng)常

58、需要使用動態(tài)SQL的寫法,由于參數(shù)的不同,可能SQL的執(zhí)行效率不同;綁定變量是相對文本變量來講的,所謂文本變量是指在SQL直接書寫查詢條件,這樣的SQL在不同條件下需要反復(fù)解析,綁定變量是指使用變量來代替直接書寫條件,查詢bind value在運行時傳遞,然后綁定執(zhí)行。優(yōu)點是減少硬解析,降低CPU的爭用,節(jié)省shared_pool缺點是不能使用histogram,sql優(yōu)化比擬困難10.   如何穩(wěn)定(固定)執(zhí)行方案可以在SQL語句中指定執(zhí)行方案。使用HINTS;query_rewrite_enabled = truestar_transformation_enabled

59、= trueoptimizer_features_enable = 創(chuàng)立并使用stored outline11.   和排序相關(guān)的存在8i和9i分別怎樣調(diào)整,臨時表空間的作用是什么SORT_AREA_SIZE 在進展排序操作時,如果排序的容太多,存里不能全部放下,則需要進展外部排序,此時需要利用臨時表空間來存放排序的中間結(jié)果。8i中sort_area_size/sort_area_retained_size決定了排序所需要的存, 如果排序操作不能在sort_area_size中完成,就會用到temp表空間9i中如果workarea_size_policy=auto時,排序在

60、pga進展,通常pga_aggregate_target的1/20可以用來進展disk sort;如果workarea_size_policy=manual時,排序需要的存由sort_area_size決定, 在執(zhí)行order by/group by/distinct/union/create inde*/inde* rebuild/minus等操作時,如果在pga或sort_area_size中不能完成,排序?qū)⒃谂R時表空間進展disk sort,臨時表空間主要作用就是完成系統(tǒng)中的disk sort.12.   存在表T(a,b,c,d),要根據(jù)字段c排序后取第2130條記

61、錄顯示,請給出sql     SELECT    *         FROM (SELECT ROWNUM AS row_num, tmp_tab.*                 FROM (SELECT    a, b, c, d  

62、;                         FROM T                       ORDER BY c) tmp

63、_tab                WHERE ROWNUM <= 30)        WHERE row_num >= 20ORDER BY row_num;create table t(a number(,b number(,c number(,d number();/beginfor i in 1 . 300 loopinsert into t valu

64、es(mod(i,2),i/2,dbms_random.value(1,300),i/4);end loop;end;/select * from (select c.*,rownum as rn from (select * from t order by c desc) c) where rn between 21 and 30;/select * from (select * from test order by c desc) * where rownum &lt; 30minusselect * from (select * from test order by c desc

65、) y where rownum &lt; 20 order by 3 desc相比之 minus性能較差二:數(shù)據(jù)庫根本概念類1 Pctused and pctfree 表示什么含義有什么作用pctused與pctfree控制數(shù)據(jù)塊是否出現(xiàn)在freelist中,   pctfree控制數(shù)據(jù)塊中保存用于update的空間,當(dāng)數(shù)據(jù)塊中的free space小于pctfree設(shè)置的空間時,該數(shù)據(jù)塊從freelist中去掉,當(dāng)塊由于dml操作free space大于pct_used設(shè)置的空間時,該數(shù)據(jù)庫塊將被添加在freelist鏈表中。2 簡單描述tablespace /

66、 segment / e*tent / block之間的關(guān)系tablespace: 一個數(shù)據(jù)庫劃分為一個或多個邏輯單位,該邏輯單位成為表空間;每一個表空間可能包含一個或多個 Segment;Segments: Segment指在tablespace中為特定邏輯存儲構(gòu)造分配的空間。每一個段是由一個或多個e*tent組成。包括數(shù)據(jù)段、索引段、回滾段和臨時段。E*tents: 一個 e*tent 由一系列連續(xù)的 Oracle blocks組成.ORACLE為通過e*tent 來給segment分配空間。Data Blocks:Oracle 數(shù)據(jù)庫最小的I/O存儲單位,一個data block對應(yīng)一個

67、或多個分配給data file的操作系統(tǒng)塊。table創(chuàng)立時,默認創(chuàng)立了一個data segment,每個data segment含有min e*tents指定的e*tents數(shù),每個e*tent據(jù)據(jù)表空間的存儲參數(shù)分配一定數(shù)量的blocks3 描述tablespace和datafile之間的關(guān)系一個表空間可包含一個或多個數(shù)據(jù)文件。表空間利用增加或擴展數(shù)據(jù)文件擴大表空間,表空間的大小為組成該表空間的數(shù)據(jù)文件大小的和。一個datafile只能屬于一個表空間;一個tablespace可以有一個或多個datafile,每個datafile只能在一個tablespace, table中的數(shù)據(jù),通過ha

68、sh算法分布在tablespace中的各個datafile中,tablespace是邏輯上的概念,datafile則在物理上儲存了數(shù)據(jù)庫的種種對象。4 本地管理表空間和字典管理表空間的特點,ASSM有什么特點本地管理表空間:9i默認空閑塊列表存儲在表空間的數(shù)據(jù)文件頭。特點:減少數(shù)據(jù)字典表的競爭,當(dāng)分配和收縮空間時會產(chǎn)生回滾,不需要合并。字典管理表空間:8i默認空閑塊列表存儲在數(shù)據(jù)庫中的字典表里.特點:片由數(shù)據(jù)字典管理,可能造成字典表的爭用。存儲在表空間的每一個段都會有不同的存儲字句,需要合并相鄰的塊;本地管理表空間Locally Managed Tablespace簡稱LMT8i以后出現(xiàn)的一種

69、新的表空間的管理模式,通過位圖來管理表空間的空間使用。字典管理表空間Dictionary-Managed Tablespace簡稱DMT8i以前包括以后都還可以使用的一種表空間管理模式,通過數(shù)據(jù)字典管理表空間的空間使用。動段空間管理ASSM,它首次出現(xiàn)在Oracle920里有了ASSM,列表freelist被位圖所取代,它是一個二進制的數(shù)組,能夠迅速有效地管理存儲擴展和剩余區(qū)塊free block,因此能夠改善分段存儲本質(zhì),ASSM表空間上創(chuàng)立的段還有另外一個稱呼叫Bitmap Managed SegmentsBMB 段。5 回滾段的作用是什么回滾段用于保存數(shù)據(jù)修改前的映象,這些信息用于生成讀

70、一致性數(shù)據(jù)庫信息、在數(shù)據(jù)庫恢復(fù)和Rollback時使用。一個事務(wù)只能使用一個回滾段。事務(wù)回滾:當(dāng)事務(wù)修改表中數(shù)據(jù)的時候,該數(shù)據(jù)修改前的值即前影像會存放在回滾段中,當(dāng)用戶回滾事務(wù)ROLLBACK時,ORACLE將會利用回滾段中的數(shù)據(jù)前影像來將修改的數(shù)據(jù)恢復(fù)到原來的值。事務(wù)恢復(fù):當(dāng)事務(wù)正在處理的時候,例程失敗,回滾段的信息保存在undo表空間中,ORACLE將在下次翻開數(shù)據(jù)庫時利用回滾來恢復(fù)未提交的數(shù)據(jù)。讀一致性:當(dāng)一個會話正在修改數(shù)據(jù)時,其他的會話將看不到該會話未提交的修改。 當(dāng)一個語句正在執(zhí)行時,該語句將看不到從該語句開場執(zhí)行后的未提交的修改語句級讀一致性當(dāng)ORACLE執(zhí)行SELECT語句時,ORACLE依照當(dāng)前的系統(tǒng)改變號SYSTEM CHANGE NUMBER-S 來保證任何前于當(dāng)前S的未提交的改變不被該語句處理。可以想象:當(dāng)一個長時間的查詢正在執(zhí)行時, 假設(shè)其他會話改變了該查詢要查詢的*個數(shù)據(jù)塊,ORACLE將利用回滾段的數(shù)據(jù)前影像來構(gòu)造一個讀一致性

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論