數(shù)據(jù)庫(kù)面試題-共8套_第1頁(yè)
數(shù)據(jù)庫(kù)面試題-共8套_第2頁(yè)
數(shù)據(jù)庫(kù)面試題-共8套_第3頁(yè)
數(shù)據(jù)庫(kù)面試題-共8套_第4頁(yè)
數(shù)據(jù)庫(kù)面試題-共8套_第5頁(yè)
已閱讀5頁(yè),還剩91頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、數(shù)據(jù)庫(kù)面試題1數(shù)據(jù)庫(kù)基礎(chǔ)(面試常見(jiàn)題)一、數(shù)據(jù)庫(kù)基礎(chǔ)1. 數(shù)據(jù)抽象:物理抽象、概念抽象、視圖級(jí)抽象,內(nèi)模式、模式、外模式2. SQL語(yǔ)言包括數(shù)據(jù)定義、數(shù)據(jù)操縱(Data Manipulation),數(shù)據(jù)控制(Data Control)數(shù)據(jù)定義:Create Table,Alter Table,Drop Table, Craete/Drop Index等數(shù)據(jù)操縱:Select ,insert,update,delete,數(shù)據(jù)控制:grant,revoke3. SQL常用命令:CREATE TABLE Student( ID NUMBER PRIMARY KEY,NAME VARCHAR2(50)

2、 NOT NULL);/建表CREATE VIEW view_name ASSelect * FROM Table_name;/建視圖Create UNIQUE INDEX index_name ON TableName(col_name);/建索引INSERT INTO tablename column1,column2, values(exp1,exp2,);/插入INSERT INTO Viewname column1,column2, values(exp1,exp2,);/插入視圖實(shí)際影響表UPDATE tablename SET name=zang 3 condition;/更新數(shù)

3、據(jù)DELETE FROM Tablename WHERE condition;/刪除GRANT (Select,delete,) ON (對(duì)象) TO USER_NAME WITH GRANT OPTION;/授權(quán)REVOKE (權(quán)限表) ON(對(duì)象) 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. 完整性約束:實(shí)體完整性、參照完整性、用戶(hù)定義完整性6. 第三范式:1NF:每個(gè)屬性是不可分的。 2

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

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

6、壓力。4:存儲(chǔ)過(guò)程可以接受參數(shù)、輸出參數(shù)、返回單個(gè)或多個(gè)結(jié)果集以及返回值??梢韵虺绦蚍祷劐e(cuò)誤原因5:存儲(chǔ)過(guò)程可以包含程序流、邏輯以及對(duì)數(shù)據(jù)庫(kù)的查詢(xún)。同時(shí)可以實(shí)體封裝和隱藏了數(shù)據(jù)邏輯。   13. 觸發(fā)器: 當(dāng)滿(mǎn)足觸發(fā)器條件,則系統(tǒng)自動(dòng)執(zhí)行觸發(fā)器的觸發(fā)體。觸發(fā)時(shí)間:有before,after.觸發(fā)事件:有insert,update,delete三種。觸發(fā)類(lèi)型:有行觸發(fā)、語(yǔ)句觸發(fā)14.內(nèi)聯(lián)接,外聯(lián)接區(qū)別??jī)?nèi)連接是保證兩個(gè)表中所有的行都要滿(mǎn)足連接條件,而外連接則不然。在外連接中,某些不滿(mǎn)條件的列也會(huì)顯示出來(lái),也就是說(shuō),只限制其中一個(gè)表的行,而不限制另一個(gè)表的行。分左連接、右連接、

7、全連接三種數(shù)據(jù)庫(kù)面試題2一、教師號(hào)星期號(hào)是否有課有有有有有寫(xiě)一條sql語(yǔ)句讓你變?yōu)檫@樣的表教師號(hào)星期一星期二星期三各星期下的數(shù)字表示:對(duì)應(yīng)的教師在星期幾已經(jīng)排的課數(shù) 二、書(shū)表(books)book_id,book_name,creatdate,Lastmodifydate,decription001,三個(gè)人的世界,2005-02-02,2005-07-07,NULL作者表(authors)A_id,A_name01,王紛02,李尚03,泰和部門(mén)表(depts)d_id,d_name001,編輯一部002,編輯二部003,編輯三部書(shū)和作者關(guān)聯(lián)表(bookmap)book_id,A_id

8、001,01001,02001,03部門(mén)和作者關(guān)聯(lián)表(depmap)d_id,a_id001,01002,02003,03找出每個(gè)部門(mén)的所寫(xiě)的總書(shū)兩,比如,一本書(shū)有3個(gè)人寫(xiě),如果三個(gè)人在不同的部門(mén),則每個(gè)部門(mén)的總數(shù)量就是1.最后結(jié)果如下:部門(mén),書(shū)量編輯一部,1編輯二部,1編輯三部,1三、兩個(gè)表情況表名:wu_plan ID      plan      model       corp_code   

9、60; plannum     prixis1       00001     exx22         nokia        2000         02     

10、60; 00002     lc001         sony         3000         0表名:wu_bomID     plan       pact    

11、      amount    1      00001      aa1            3002      00001      aa2     &#

12、160;      2003      00002      bb1            5004      00002      bb2        &#

13、160;   8005      00002      bb3            400查詢(xún)這兩個(gè)表中plan唯一,每一個(gè)plan中,amount最少的,plannum大于prixis的記錄結(jié)果是:ID      plan      model  

14、;     corp_code     plannum     prixis     pact   amount1       00001     exx22         nokia    

15、60;   2000         0       a2       2002       00002     lc001         sony    &

16、#160;    3000         0       bb3      400四、表1結(jié)構(gòu)如下:部門(mén) 條碼 品名 銷(xiāo)售額 銷(xiāo)售數(shù)量 銷(xiāo)售日期表2結(jié)構(gòu)如下課別 部門(mén)要求:先按部門(mén)排序,再按銷(xiāo)售額、銷(xiāo)售數(shù)量排序檢索出某個(gè)課別每個(gè)部門(mén)一個(gè)時(shí)期內(nèi)的商品銷(xiāo)售額的前三名,如查詢(xún)01課別2007年4月15日到2007年4月22日每個(gè)部門(mén)一個(gè)周內(nèi)的商品銷(xiāo)售額合計(jì)的前三名 SQL

17、 面試題目匯總1觸發(fā)器的作用?  答:觸發(fā)器是一中特殊的存儲(chǔ)過(guò)程,主要是通過(guò)事件來(lái)觸發(fā)而被執(zhí)行的。它可以強(qiáng)化約束,來(lái)維護(hù)數(shù)據(jù)的完整性和一致性,可以跟蹤數(shù)據(jù)庫(kù)內(nèi)的操作從而不允許未經(jīng)許可的更新和變化??梢月?lián)級(jí)運(yùn)算。如,某表上的觸發(fā)器上包含對(duì)另一個(gè)表的數(shù)據(jù)操作,而該操作又會(huì)導(dǎo)致該表觸發(fā)器被觸發(fā)。2。什么是存儲(chǔ)過(guò)程?用什么來(lái)調(diào)用?答:存儲(chǔ)過(guò)程是一個(gè)預(yù)編譯的SQL語(yǔ)句,優(yōu)點(diǎn)是允許模塊化的設(shè)計(jì),就是說(shuō)只需創(chuàng)建一次,以后在該程序中就可以調(diào)用多次。如果某次操作需要執(zhí)行多次SQL,使用存儲(chǔ)過(guò)程比單純SQL語(yǔ)句執(zhí)行要快??梢杂靡粋€(gè)命令對(duì)象來(lái)調(diào)用存儲(chǔ)過(guò)程。3。索引的作用?和它的優(yōu)點(diǎn)缺點(diǎn)是什么?答:索引就一

18、種特殊的查詢(xún)表,數(shù)據(jù)庫(kù)的搜索引擎可以利用它加速對(duì)數(shù)據(jù)的檢索。它很類(lèi)似與現(xiàn)實(shí)生活中書(shū)的目錄,不需要查詢(xún)整本書(shū)內(nèi)容就可以找到想要的數(shù)據(jù)。索引可以是唯一的,創(chuàng)建索引允許指定單個(gè)列或者是多個(gè)列。缺點(diǎn)是它減慢了數(shù)據(jù)錄入的速度,同時(shí)也增加了數(shù)據(jù)庫(kù)的尺寸大小。3。什么是內(nèi)存泄漏?答:一般我們所說(shuō)的內(nèi)存泄漏指的是堆內(nèi)存的泄漏。堆內(nèi)存是程序從堆中為其分配的,大小任意的,使用完后要顯示釋放內(nèi)存。當(dāng)應(yīng)用程序用關(guān)鍵字new等創(chuàng)建對(duì)象時(shí),就從堆中為它分配一塊內(nèi)存,使用完后程序調(diào)用free或者delete釋放該內(nèi)存,否則就說(shuō)該內(nèi)存就不能被使用,我們就說(shuō)該內(nèi)存被泄漏了。4。維護(hù)數(shù)據(jù)庫(kù)的完整性和一致性,你喜歡用觸發(fā)器還是自寫(xiě)

19、業(yè)務(wù)邏輯?為什么?答:我是這樣做的,盡可能使用約束,如check,主鍵,外鍵,非空字段等來(lái)約束,這樣做效率最高,也最方便。其次是使用觸發(fā)器,這種方法可以保證,無(wú)論什么業(yè)務(wù)系統(tǒng)訪問(wèn)數(shù)據(jù)庫(kù)都可以保證數(shù)據(jù)的完整新和一致性。最后考慮的是自寫(xiě)業(yè)務(wù)邏輯,但這樣做麻煩,編程復(fù)雜,效率低下。5。什么是事務(wù)?什么是鎖?答:事務(wù)就是被綁定在一起作為一個(gè)邏輯工作單元的SQL語(yǔ)句分組,如果任何一個(gè)語(yǔ)句操作失敗那么整個(gè)操作就被失敗,以后操作就會(huì)回滾到操作前狀態(tài),或者是上有個(gè)節(jié)點(diǎn)。為了確保要么執(zhí)行,要么不執(zhí)行,就可以使用事務(wù)。要將有組語(yǔ)句作為事務(wù)考慮,就需要通過(guò)ACID測(cè)試,即原子性,一致性,隔離性和持久性。 

20、 鎖:在所以的DBMS中,鎖是實(shí)現(xiàn)事務(wù)的關(guān)鍵,鎖可以保證事務(wù)的完整性和并發(fā)性。與現(xiàn)實(shí)生活中鎖一樣,它可以使某些數(shù)據(jù)的擁有者,在某段時(shí)間內(nèi)不能使用某些數(shù)據(jù)或數(shù)據(jù)結(jié)構(gòu)。當(dāng)然鎖還分級(jí)別的。6。什么叫視圖?游標(biāo)是什么?答:視圖是一種虛擬的表,具有和物理表相同的功能??梢詫?duì)視圖進(jìn)行增,改,查,操作,試圖通常是有一個(gè)表或者多個(gè)表的行或列的子集。對(duì)視圖的修改不影響基本表。它使得我們獲取數(shù)據(jù)更容易,相比多表查詢(xún)。  游標(biāo):是對(duì)查詢(xún)出來(lái)的結(jié)果集作為一個(gè)單元來(lái)有效的處理。游標(biāo)可以定在該單元中的特定行,從結(jié)果集的當(dāng)前行檢索一行或多行??梢詫?duì)結(jié)果集當(dāng)前行做修改。一般不使用游標(biāo),但是需要逐條處理數(shù)據(jù)的時(shí)候,游

21、標(biāo)顯得十分重要。7。為管理業(yè)務(wù)培訓(xùn)信息,建立3個(gè)表:     S(S#,SN,SD,SA)S#,SN,SD,SA分別代表學(xué)號(hào),學(xué)員姓名,所屬單位,學(xué)員年齡     C(C#,CN)C#,CN分別代表課程編號(hào),課程名稱(chēng)      SC(S#,C#,G) S#,C#,G分別代表學(xué)號(hào),所選的課程編號(hào),學(xué)習(xí)成績(jī)    (1)使用標(biāo)準(zhǔn)SQL嵌套語(yǔ)句查詢(xún)選修課程名稱(chēng)為稅收基礎(chǔ)的學(xué)員學(xué)號(hào)和姓名?    

22、0;     答案:select s# ,sn from s where S# in(select S# from c,sc where c.c#=sc.c# and cn=稅收基礎(chǔ))      (2) 使用標(biāo)準(zhǔn)SQL嵌套語(yǔ)句查詢(xún)選修課程編號(hào)為C2的學(xué)員姓名和所屬單位?答:select sn,sd from s,sc where s.s#=sc.s# and sc.c#=c2      (3) 使用標(biāo)準(zhǔn)SQL嵌套語(yǔ)句查詢(xún)不選修課程編號(hào)為C5的學(xué)員姓名和所屬

23、單位?答:select sn,sd from s where s# not in(select s# from sc where c#=c5)       (4)查詢(xún)選修了課程的學(xué)員人數(shù)答:select 學(xué)員人數(shù)=count(distinct s#) from sc       (5) 查詢(xún)選修課程超過(guò)5門(mén)的學(xué)員學(xué)號(hào)和所屬單位?答:select sn,sd from s where s# in(select s# from sc group by s# having coun

24、t(distinct c#)>5)目前在職場(chǎng)中很難找到非常合格的數(shù)據(jù)庫(kù)開(kāi)發(fā)人員。有人說(shuō):“SQL開(kāi)發(fā)是一門(mén)語(yǔ)言,它很容易學(xué),但是很難掌握?!?華為http:/sqlserver.365dev.NET/sql-1981.html在面試過(guò)程中多次碰到兩道SQL查詢(xún)的題目,一是查詢(xún)A(ID,Name)表中第31至40條記錄,ID作為主鍵可能是不是連續(xù)增長(zhǎng)的列,完整的查詢(xún)語(yǔ)句如下: select top 10 * from A where ID >(select max(ID) from (select top 30 ID from A order by A ) T) order

25、 by A 另外一道題目的要求是查詢(xún)表A中存在ID重復(fù)三次以上的記錄,完整的查詢(xún)語(yǔ)句如下:select * from(select count(ID) as count from table group by ID)T where T.count>3 以上兩道題目非常有代表意義,望各位把自己碰到的有代表的查詢(xún)都貼上來(lái)。create table testtable1(id int IDENTITY,department varchar(12) )select * from testtable1insert into testtable1 values('設(shè)計(jì)&#

26、39;)insert into testtable1 values('市場(chǎng)')insert into testtable1 values('售后')/*結(jié)果id department1   設(shè)計(jì)2   市場(chǎng)3   售后 */create table testtable2(id int IDENTITY,dptID int,name varchar(12)insert into testtable2 values(1,'張三')insert into testtable2 values(1

27、,'李四')insert into testtable2 values(2,'王五')insert into testtable2 values(3,'彭六')insert into testtable2 values(4,'陳七')/*用一條SQL語(yǔ)句,怎么顯示如下結(jié)果id dptID department name1   1      設(shè)計(jì)        張三2   1

28、      設(shè)計(jì)        李四3   2      市場(chǎng)        王五4   3      售后        彭六5   4   

29、60;  黑人        陳七*/答案是:SELECT testtable2.* , ISNULL(department,'黑人')FROM testtable1 right join testtable2 on testtable2.dptID = testtable1.ID在面試應(yīng)聘的SQL Server數(shù)據(jù)庫(kù)開(kāi)發(fā)人員時(shí),我運(yùn)用了一套標(biāo)準(zhǔn)的基準(zhǔn)技術(shù)問(wèn)題。下面這些問(wèn)題是我覺(jué)得能夠真正有助于淘汰不合格應(yīng)聘者的問(wèn)題。它們按照從易到難的順序排列。當(dāng)你問(wèn)到關(guān)于主鍵和外鍵的問(wèn)題時(shí),后面的問(wèn)題都十分有難度

30、,因?yàn)榇鸢缚赡軙?huì)更難解釋和說(shuō)明,尤其是在面試的情形下。你能向我簡(jiǎn)要敘述一下SQL Server 2000中使用的一些數(shù)據(jù)庫(kù)對(duì)象嗎?你希望聽(tīng)到的答案包括這樣一些對(duì)象:表格、視圖、用戶(hù)定義的函數(shù),以及存儲(chǔ)過(guò)程;如果他們還能夠提到像觸發(fā)器這樣的對(duì)象就更好了。如果應(yīng)聘者不能回答這個(gè)基本的問(wèn)題,那么這不是一個(gè)好兆頭。NULL是什么意思?NULL(空)這個(gè)值是數(shù)據(jù)庫(kù)世界里一個(gè)非常難纏的東西,所以有不少應(yīng)聘者會(huì)在這個(gè)問(wèn)題上跌跟頭您也不要覺(jué)得意外。NULL這個(gè)值表示UNKNOWN(未知):它不表示“”(空字符串)。假設(shè)您的SQL Server數(shù)據(jù)庫(kù)里有ANSI_NULLS,當(dāng)然在默認(rèn)情況下會(huì)有,對(duì)NULL這個(gè)

31、值的任何比較都會(huì)生產(chǎn)一個(gè)NULL值。您不能把任何值與一個(gè) UNKNOWN值進(jìn)行比較,并在邏輯上希望獲得一個(gè)答案。您必須使用IS NULL操作符。什么是索引?SQL Server 2000里有什么類(lèi)型的索引?任何有經(jīng)驗(yàn)的數(shù)據(jù)庫(kù)開(kāi)發(fā)人員都應(yīng)該能夠很輕易地回答這個(gè)問(wèn)題。一些經(jīng)驗(yàn)不太多的開(kāi)發(fā)人員能夠回答這個(gè)問(wèn)題,但是有些地方會(huì)說(shuō)不清楚。簡(jiǎn)單地說(shuō),索引是一個(gè)數(shù)據(jù)結(jié)構(gòu),用來(lái)快速訪問(wèn)數(shù)據(jù)庫(kù)表格或者視圖里的數(shù)據(jù)。在SQL Server里,它們有兩種形式:聚集索引和非聚集索引。聚集索引在索引的葉級(jí)保存數(shù)據(jù)。這意味著不論聚集索引里有表格的哪個(gè)(或哪些)字段,這些字段都會(huì)按順序被保存在表格。由于存在這種排序,所以每

32、個(gè)表格只會(huì)有一個(gè)聚集索引。非聚集索引在索引的葉級(jí)有一個(gè)行標(biāo)識(shí)符。這個(gè)行標(biāo)識(shí)符是一個(gè)指向磁盤(pán)上數(shù)據(jù)的指針。它允許每個(gè)表格有多個(gè)非聚集索引。什么是主鍵?什么是外鍵?主鍵是表格里的(一個(gè)或多個(gè))字段,只用來(lái)定義表格里的行;主鍵里的值總是唯一的。外鍵是一個(gè)用來(lái)建立兩個(gè)表格之間關(guān)系的約束。這種關(guān)系一般都涉及一個(gè)表格里的主鍵字段與另外一個(gè)表格(盡管可能是同一個(gè)表格)里的一系列相連的字段。那么這些相連的字段就是外鍵。什么是觸發(fā)器?SQL Server 2000有什么不同類(lèi)型的觸發(fā)器?讓未來(lái)的數(shù)據(jù)庫(kù)開(kāi)發(fā)人員知道可用的觸發(fā)器類(lèi)型以及如何實(shí)現(xiàn)它們是非常有益的。觸發(fā)器是一種專(zhuān)用類(lèi)型的存儲(chǔ)過(guò)程,它被捆綁到SQL Se

33、rver 2000的表格或者視圖上。在SQL Server 2000里,有INSTEAD-OF和AFTER兩種觸發(fā)器。INSTEAD-OF觸發(fā)器是替代數(shù)據(jù)操控語(yǔ)言(Data Manipulation Language,DML)語(yǔ)句對(duì)表格執(zhí)行語(yǔ)句的存儲(chǔ)過(guò)程。例如,如果我有一個(gè)用于TableA的INSTEAD-OF-UPDATE觸發(fā)器,同時(shí)對(duì)這個(gè)表格執(zhí)行一個(gè)更新語(yǔ)句,那么INSTEAD-OF-UPDATE觸發(fā)器里的代碼會(huì)執(zhí)行,而不是我執(zhí)行的更新語(yǔ)句則不會(huì)執(zhí)行操作。AFTER觸發(fā)器要在DML語(yǔ)句在數(shù)據(jù)庫(kù)里使用之后才執(zhí)行。這些類(lèi)型的觸發(fā)器對(duì)于監(jiān)視發(fā)生在數(shù)據(jù)庫(kù)表格里的數(shù)據(jù)變化十分好用。您如何確一個(gè)帶有名

34、為Fld1字段的TableB表格里只具有Fld1字段里的那些值,而這些值同時(shí)在名為T(mén)ableA的表格的Fld1字段里?這個(gè)與關(guān)系相關(guān)的問(wèn)題有兩個(gè)可能的答案。第一個(gè)答案(而且是您希望聽(tīng)到的答案)是使用外鍵限制。外鍵限制用來(lái)維護(hù)引用的完整性。它被用來(lái)確保表格里的字段只保存有已經(jīng)在不同的(或者相同的)表格里的另一個(gè)字段里定義了的值。這個(gè)字段就是候選鍵(通常是另外一個(gè)表格的主鍵)。另外一種答案是觸發(fā)器。觸發(fā)器可以被用來(lái)保證以另外一種方式實(shí)現(xiàn)與限制相同的作用,但是它非常難設(shè)置與維護(hù),而且性能一般都很糟糕。由于這個(gè)原因,微軟建議開(kāi)發(fā)人員使用外鍵限制而不是觸發(fā)器來(lái)維護(hù)引用的完整性。對(duì)一個(gè)投入使用的在線事務(wù)處

35、理表格有過(guò)多索引需要有什么樣的性能考慮?你正在尋找進(jìn)行與數(shù)據(jù)操控有關(guān)的應(yīng)聘人員。對(duì)一個(gè)表格的索引越多,數(shù)據(jù)庫(kù)引擎用來(lái)更新、插入或者刪除數(shù)據(jù)所需要的時(shí)間就越多,因?yàn)樵跀?shù)據(jù)操控發(fā)生的時(shí)候索引也必須要維護(hù)。你可以用什么來(lái)確保表格里的字段只接受特定范圍里的值?這個(gè)問(wèn)題可以用多種方式來(lái)回答,但是只有一個(gè)答案是“好”答案。您希望聽(tīng)到的回答是Check限制,它在數(shù)據(jù)庫(kù)表格里被定義,用來(lái)限制輸入該列的值。觸發(fā)器也可以被用來(lái)限制數(shù)據(jù)庫(kù)表格里的字段能夠接受的值,但是這種辦法要求觸發(fā)器在表格里被定義,這可能會(huì)在某些情況下影響到性能。因此,微軟建議使用Check限制而不是其他的方式來(lái)限制域的完整性。如果應(yīng)聘者能夠正確

36、地回答這個(gè)問(wèn)題,那么他的機(jī)會(huì)就非常大了,因?yàn)檫@表明他們具有使用存儲(chǔ)過(guò)程的經(jīng)驗(yàn)。返回參數(shù)總是由存儲(chǔ)過(guò)程返回,它用來(lái)表示存儲(chǔ)過(guò)程是成功還是失敗。返回參數(shù)總是INT數(shù)據(jù)類(lèi)型。OUTPUT參數(shù)明確要求由開(kāi)發(fā)人員來(lái)指定,它可以返回其他類(lèi)型的數(shù)據(jù),例如字符型和數(shù)值型的值。(可以用作輸出參數(shù)的數(shù)據(jù)類(lèi)型是有一些限制的。)您可以在一個(gè)存儲(chǔ)過(guò)程里使用多個(gè)OUTPUT參數(shù),而您只能夠使用一個(gè)返回參數(shù)。什么是相關(guān)子查詢(xún)?如何使用這些查詢(xún)?經(jīng)驗(yàn)更加豐富的開(kāi)發(fā)人員將能夠準(zhǔn)確地描述這種類(lèi)型的查詢(xún)。相關(guān)子查詢(xún)是一種包含子查詢(xún)的特殊類(lèi)型的查詢(xún)。查詢(xún)里包含的子查詢(xún)會(huì)真正請(qǐng)求外部查詢(xún)的值,從而形成一個(gè)類(lèi)似于循環(huán)的狀況。數(shù)據(jù)庫(kù)面試題

37、3一:SQL tuning 類(lèi)1.       列舉幾種表連接方式Answer:等連接(內(nèi)連接)、非等連接、自連接、外連接(左、右、全)Or hash join/merge join/nest loop(cluster join)/index join ?Oracle 8i,9i 表連接方法。一般的相等連接: select * from a, b where a.id = b.id; 這個(gè)就屬于內(nèi)連接。對(duì)于外連接:Oracle中可以使用“(+) ”來(lái)表示,9i可以使用LEFT/RIGHT/FULL OUTER JOINLEFT OUT

38、ER JOIN:左外關(guān)聯(lián)SELECT e.last_name, e.department_id, d.department_nameFROM employees eLEFT OUTER JOIN departments dON (e.department_id = d.department_id);等價(jià)于SELECT e.last_name, e.department_id, d.department_nameFROM employees e, departments dWHERE e.department_id=d.department_id(+)結(jié)果為:所有員工及對(duì)應(yīng)部門(mén)的記錄,包括沒(méi)有對(duì)

39、應(yīng)部門(mén)編號(hào)department_id的員工記錄。RIGHT OUTER JOIN:右外關(guān)聯(lián)SELECT e.last_name, e.department_id, d.department_nameFROM employees eRIGHT OUTER JOIN departments dON (e.department_id = d.department_id);等價(jià)于SELECT e.last_name, e.department_id, d.department_nameFROM employees e, departments dWHERE e.department_id(+)=d.d

40、epartment_id結(jié)果為:所有員工及對(duì)應(yīng)部門(mén)的記錄,包括沒(méi)有任何員工的部門(mén)記錄。FULL OUTER JOIN:全外關(guān)聯(lián)SELECT e.last_name, e.department_id, d.department_nameFROM employees eFULL OUTER JOIN departments dON (e.department_id = d.department_id);結(jié)果為:所有員工及對(duì)應(yīng)部門(mén)的記錄,包括沒(méi)有對(duì)應(yīng)部門(mén)編號(hào)department_id的員工記錄和沒(méi)有任何員工的部門(mén)記錄。ORACLE8i是不直接支持完全外連接的語(yǔ)法,也就是說(shuō)不能在左右兩個(gè)表上同時(shí)加上(

41、+),下面是在ORACLE8i可以參考的完全外連接語(yǔ)法select t1.id,t2.id from table1 t1,table t2 where t1.id=t2.id(+)unionselect t1.id,t2.id from table1 t1,table t2 where t1.id(+)=t2.id連接類(lèi)型定義圖示例子 內(nèi)連接只連接匹配的行 select A.c1,B.c2 from A join B on A.c3 = B.c3; 左外連接包含左邊表的全部行(不管右邊的表中是否存在與它們匹配的行)以及右邊表中全部匹配的行 select

42、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; 全外連接包含左、右兩個(gè)表的全部行,不管在另一邊的表中是否存在與它們匹配的行 select A.c1,B.c2 from A full join B on A.c3 = B.c3; (theta)連接使用等值以外的條件來(lái)匹配左、右兩個(gè)表中的行 selec

43、t A.c1,B.c2 from A join B on A.c3 != B.c3; 交叉連接生成笛卡爾積它不使用任何匹配或者選取條件,而是直接將一個(gè)數(shù)據(jù)源中的每個(gè)行與另一個(gè)數(shù)據(jù)源的每個(gè)行一一匹配select A.c1,B.c2 from A,B;2.       不借助第三方工具,怎樣查看sql的執(zhí)行計(jì)劃I) 使用Explain Plan,查詢(xún)PLAN_TABLE;   EXPLAIN   PLAN      SET STATEMEN

44、T_ID='QUERY1'      FOR      SELECT *      FROM a      WHERE aa=1;   SELECT    operation, options, object_name, object_type, ID, parent_id     

45、  FROM plan_table      WHERE STATEMENT_ID = 'QUERY1'   ORDER BY ID;II)SQLPLUS中的SET TRACE 即可看到Execution Plan Statistics   SET AUTOTRACE ON;3.       如何使用CBO,CBO與RULE的區(qū)別   IF 初始化參數(shù) OPTIMIZER_MODE = CHOOSE

46、THEN   -(8I DEFAULT)      IF 做過(guò)表分析         THEN 優(yōu)化器 Optimizer=CBO(COST);           /*高效*/      ELSE         優(yōu)化

47、器 Optimizer=RBO(RULE);                /*高效*/      END IF;   END IF;   區(qū)別:   RBO根據(jù)規(guī)則選擇最佳執(zhí)行路徑來(lái)運(yùn)行查詢(xún)。   CBO根據(jù)表統(tǒng)計(jì)找到最低成本的訪問(wèn)數(shù)據(jù)的方法確定執(zhí)行計(jì)劃。   使用CBO需要注意: &#

48、160; I)   需要經(jīng)常對(duì)表進(jìn)行ANALYZE命令進(jìn)行分析統(tǒng)計(jì);   II) 需要穩(wěn)定執(zhí)行計(jì)劃;   III)需要使用提示(Hint);   使用RULE需要注意:I)   選擇最有效率的表名順序II) 優(yōu)化SQL的寫(xiě)法;在optimizer_mode=choose時(shí),如果表有統(tǒng)計(jì)信息(分區(qū)表外),優(yōu)化器將選擇CBO,否則選RBO。RBO遵循簡(jiǎn)單的分級(jí)方法學(xué),使用15種級(jí)別要點(diǎn),當(dāng)接收到查詢(xún),優(yōu)化器將評(píng)估使用到的要點(diǎn)數(shù)目,然后選擇最佳級(jí)別(最少的數(shù)量)的執(zhí)行路徑來(lái)運(yùn)行查詢(xún)。CBO嘗試找到最低

49、成本的訪問(wèn)數(shù)據(jù)的方法,為了最大的吞吐量或最快的初始響應(yīng)時(shí)間,計(jì)算使用不同的執(zhí)行計(jì)劃的成本,并選擇成本最低的一個(gè),關(guān)于表的數(shù)據(jù)內(nèi)容的統(tǒng)計(jì)被用于確定執(zhí)行計(jì)劃。4.       如何定位重要(消耗資源多)的SQL使用CPU多的用戶(hù)sessionSELECT a.SID, spid, status, SUBSTR (gram, 1, 40) prog, a.terminal,a.SQL_TEXT, osuser, VALUE / 60 / 100 VALUEFROM v$session a, v$process b, v$sesst

50、at cWHERE c.statistic# = 12 AND c.SID = a.SID AND a.paddr = b.addrORDER BY VALUE DESC;select sql_text from v$sqlwhere disk_reads > 1000 or (executions > 0 and buffer_gets/executions > 30000);5.       如何跟蹤某個(gè)session的SQL利用TRACE 跟蹤   ALTER SES

51、SION SET SQLTRACE ON;   COLUMN SQL format a200;   SELECT    machine, sql_text SQL       FROM v$sqltext a, v$session b      WHERE address = sql_address        AND machine = 

52、9;&A'   ORDER BY hash_value, piece;exec 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);exec dbms_system.set_ev(&sid,&serial#,&event_10046,&amp

53、;level_12,'');6.       SQL調(diào)整最關(guān)注的是什么檢查系統(tǒng)的I/O問(wèn)題sard能檢查整個(gè)系統(tǒng)的iostat(IO statistics)查看該SQL的response time(db block gets/consistent gets/physical reads/sorts (disk)7.       說(shuō)說(shuō)你對(duì)索引的認(rèn)識(shí)(索引的結(jié)構(gòu)、對(duì)dml影響、對(duì)查詢(xún)影響、為什么提高查詢(xún)性能)索引有B-TREE、BIT、CLUSTER等類(lèi)型。ORA

54、CLE使用了一個(gè)復(fù)雜的自平衡B-tree結(jié)構(gòu);通常來(lái)說(shuō),在表上建立恰當(dāng)?shù)乃饕樵?xún)時(shí)會(huì)改進(jìn)查詢(xún)性能。但在進(jìn)行插入、刪除、修改時(shí),同時(shí)會(huì)進(jìn)行索引的修改,在性能上有一定的影響。有索引且查詢(xún)條件能使用索引時(shí),數(shù)據(jù)庫(kù)會(huì)先度取索引,根據(jù)索引內(nèi)容和查詢(xún)條件,查詢(xún)出ROWID,再根據(jù)ROWID取出需要的數(shù)據(jù)。由于索引內(nèi)容通常比全表內(nèi)容要少很多,因此通過(guò)先讀索引,能減少I(mǎi)/O,提高查詢(xún)性能。b-tree index/bitmap index/function index/patitional index(local/global)索引通常能提高select/update/delete的性能,會(huì)降低insert

55、的速度,8.       使用索引查詢(xún)一定能提高查詢(xún)的性能嗎?為什么通常,通過(guò)索引查詢(xún)數(shù)據(jù)比全表掃描要快.但是我們也必須注意到它的代價(jià).索引需要空間來(lái)存儲(chǔ),也需要定期維護(hù), 每當(dāng)有記錄在表中增減或索引列被修改時(shí),索引本身也會(huì)被修改. 這意味著每條記錄的INSERT,DELETE,UPDATE將為此多付出4,5 次的磁盤(pán)I/O. 因?yàn)樗饕枰~外的存儲(chǔ)空間和處理,那些不必要的索引反而會(huì)使查詢(xún)反應(yīng)時(shí)間變慢.使用索引查詢(xún)不一定能提高查詢(xún)性能,索引范圍查詢(xún)(INDEX RANGE SCAN)適用于兩種情況:基于一個(gè)范圍的檢索,一般查詢(xún)返回結(jié)果

56、集小于表中記錄數(shù)的30%宜采用;基于非唯一性索引的檢索索引就是為了提高查詢(xún)性能而存在的,如果在查詢(xún)中索引沒(méi)有提高性能,只能說(shuō)是用錯(cuò)了索引,或者講是場(chǎng)合不同9.       綁定變量是什么?綁定變量有什么優(yōu)缺點(diǎn)?綁定變量是指在SQL語(yǔ)句中使用變量,改變變量的值來(lái)改變SQL語(yǔ)句的執(zhí)行結(jié)果。優(yōu)點(diǎn):使用綁定變量,可以減少SQL語(yǔ)句的解析,能減少數(shù)據(jù)庫(kù)引擎消耗在SQL語(yǔ)句解析上的資源。提高了編程效率和可靠性。減少訪問(wèn)數(shù)據(jù)庫(kù)的次數(shù), 就能實(shí)際上減少ORACLE的工作量。缺點(diǎn):經(jīng)常需要使用動(dòng)態(tài)SQL的寫(xiě)法,由于參數(shù)的不同,可能SQL的執(zhí)行效率不同;

57、綁定變量是相對(duì)文本變量來(lái)講的,所謂文本變量是指在SQL直接書(shū)寫(xiě)查詢(xún)條件,這樣的SQL在不同條件下需要反復(fù)解析,綁定變量是指使用變量來(lái)代替直接書(shū)寫(xiě)條件,查詢(xún)bind value在運(yùn)行時(shí)傳遞,然后綁定執(zhí)行。優(yōu)點(diǎn)是減少硬解析,降低CPU的爭(zhēng)用,節(jié)省shared_pool缺點(diǎn)是不能使用histogram,sql優(yōu)化比較困難10.   如何穩(wěn)定(固定)執(zhí)行計(jì)劃可以在SQL語(yǔ)句中指定執(zhí)行計(jì)劃。使用HINTS;query_rewrite_enabled = truestar_transformation_enabled = trueoptimizer_features_enable =

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

59、rget的1/20可以用來(lái)進(jìn)行disk sort;如果workarea_size_policy=manual時(shí),排序需要的內(nèi)存由sort_area_size決定, 在執(zhí)行order by/group by/distinct/union/create index/index rebuild/minus等操作時(shí),如果在pga或sort_area_size中不能完成,排序?qū)⒃谂R時(shí)表空間進(jìn)行(disk sort),臨時(shí)表空間主要作用就是完成系統(tǒng)中的disk sort.12.   存在表T(a,b,c,d),要根據(jù)字段c排序后取第2130條記錄顯示,請(qǐng)給出sql  

60、;   SELECT    *         FROM (SELECT ROWNUM AS row_num, tmp_tab.*                 FROM (SELECT    a, b, c, d     &#

61、160;                     FROM T                       ORDER BY c) tmp_tab   

62、;             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 values(mod(i,2),i/2,dbms_

63、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) x where rownum &lt; 30minusselect * from (select * from test order by c desc) y where rownum &

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

65、lock之間的關(guān)系tablespace: 一個(gè)數(shù)據(jù)庫(kù)劃分為一個(gè)或多個(gè)邏輯單位,該邏輯單位成為表空間;每一個(gè)表空間可能包含一個(gè)或多個(gè) Segment;Segments: Segment指在tablespace中為特定邏輯存儲(chǔ)結(jié)構(gòu)分配的空間。每一個(gè)段是由一個(gè)或多個(gè)extent組成。包括數(shù)據(jù)段、索引段、回滾段和臨時(shí)段。Extents: 一個(gè) extent 由一系列連續(xù)的 Oracle blocks組成.ORACLE為通過(guò)extent 來(lái)給segment分配空間。Data Blocks:Oracle 數(shù)據(jù)庫(kù)最小的I/O存儲(chǔ)單位,一個(gè)data block對(duì)應(yīng)一個(gè)或多個(gè)分配給data file的操作系統(tǒng)塊

66、。table創(chuàng)建時(shí),默認(rèn)創(chuàng)建了一個(gè)data segment,每個(gè)data segment含有min extents指定的extents數(shù),每個(gè)extent據(jù)據(jù)表空間的存儲(chǔ)參數(shù)分配一定數(shù)量的blocks3 描述tablespace和datafile之間的關(guān)系一個(gè)表空間可包含一個(gè)或多個(gè)數(shù)據(jù)文件。表空間利用增加或擴(kuò)展數(shù)據(jù)文件擴(kuò)大表空間,表空間的大小為組成該表空間的數(shù)據(jù)文件大小的和。一個(gè)datafile只能屬于一個(gè)表空間;一個(gè)tablespace可以有一個(gè)或多個(gè)datafile,每個(gè)datafile只能在一個(gè)tablespace內(nèi), table中的數(shù)據(jù),通過(guò)hash算法分布在tablespace中的各

67、個(gè)datafile中,tablespace是邏輯上的概念,datafile則在物理上儲(chǔ)存了數(shù)據(jù)庫(kù)的種種對(duì)象。4 本地管理表空間和字典管理表空間的特點(diǎn),ASSM有什么特點(diǎn)本地管理表空間:(9i默認(rèn))空閑塊列表存儲(chǔ)在表空間的數(shù)據(jù)文件頭。特點(diǎn):減少數(shù)據(jù)字典表的競(jìng)爭(zhēng),當(dāng)分配和收縮空間時(shí)會(huì)產(chǎn)生回滾,不需要合并。字典管理表空間:(8i默認(rèn))空閑塊列表存儲(chǔ)在數(shù)據(jù)庫(kù)中的字典表里.特點(diǎn):片由數(shù)據(jù)字典管理,可能造成字典表的爭(zhēng)用。存儲(chǔ)在表空間的每一個(gè)段都會(huì)有不同的存儲(chǔ)字句,需要合并相鄰的塊;本地管理表空間(Locally Managed Tablespace簡(jiǎn)稱(chēng)LMT)8i以后出現(xiàn)的一種新的表空間的管理模式,通過(guò)位

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

69、據(jù)庫(kù)信息、在數(shù)據(jù)庫(kù)恢復(fù)和Rollback時(shí)使用。一個(gè)事務(wù)只能使用一個(gè)回滾段。事務(wù)回滾:當(dāng)事務(wù)修改表中數(shù)據(jù)的時(shí)候,該數(shù)據(jù)修改前的值(即前影像)會(huì)存放在回滾段中,當(dāng)用戶(hù)回滾事務(wù)(ROLLBACK)時(shí),ORACLE將會(huì)利用回滾段中的數(shù)據(jù)前影像來(lái)將修改的數(shù)據(jù)恢復(fù)到原來(lái)的值。事務(wù)恢復(fù):當(dāng)事務(wù)正在處理的時(shí)候,例程失敗,回滾段的信息保存在undo表空間中,ORACLE將在下次打開(kāi)數(shù)據(jù)庫(kù)時(shí)利用回滾來(lái)恢復(fù)未提交的數(shù)據(jù)。讀一致性:當(dāng)一個(gè)會(huì)話(huà)正在修改數(shù)據(jù)時(shí),其他的會(huì)話(huà)將看不到該會(huì)話(huà)未提交的修改。 當(dāng)一個(gè)語(yǔ)句正在執(zhí)行時(shí),該語(yǔ)句將看不到從該語(yǔ)句開(kāi)始執(zhí)行后的未提交的修改(語(yǔ)句級(jí)讀一致性)當(dāng)ORACLE執(zhí)行SELECT語(yǔ)句時(shí),ORACLE依照當(dāng)前的系統(tǒng)改變號(hào)(SYSTEM CHANGE NUMBER-SCN) 來(lái)保證任何前于當(dāng)前SC

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論