數據庫面試題.doc_第1頁
數據庫面試題.doc_第2頁
數據庫面試題.doc_第3頁
數據庫面試題.doc_第4頁
數據庫面試題.doc_第5頁
已閱讀5頁,還剩51頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

數據庫基礎(面試常見題) 分類: 數據庫2012-07-20 14:55905人閱讀評論(0)收藏舉報數據庫基礎(面試常見題)一、數據庫基礎1. 數據抽象:物理抽象、概念抽象、視圖級抽象,內模式、模式、外模式2. SQL語言包括數據定義、數據操縱(Data Manipulation),數據控制(Data Control)數據定義:Create Table,Alter Table,Drop Table, Craete/DropIndex等數據操縱:Select ,insert,update,delete,數據控制:grant,revoke3. SQL常用命令:CREATE TABLE Student(ID NUMBER PRIMARY KEY,NAME VARCHAR2(50) 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,);/插入視圖實際影響表UPDATE tablename SET name=zang 3 condition;/更新數據DELETE FROM Tablename WHERE condition;/刪除GRANT (Select,delete,) ON (對象) TO USER_NAME WITHGRANT OPTION;/授權REVOKE (權限表) ON(對象) FROM USER_NAMEWITH REVOKE OPTION /撤權列出工作人員及其領導的名字:Select E.NAME, S.NAME FROM EMPLOYEE E SWHERE E.SUPERName=S.Name4. 視圖:5. 完整性約束:實體完整性、參照完整性、用戶定義完整性6. 第三范式:1NF:每個屬性是不可分的。 2NF:若關系R是NF,且每個非主屬性都完全函數依賴于R的鍵。例SLC(SID#, CourceID#, SNAME,Grade),則不是2NF;3NF:若R是2NF,且它的任何非鍵屬性都不傳遞依賴于任何候選鍵。7. ER(實體/聯系)模型8. 索引作用9. 事務:是一系列的數據庫操作,是數據庫應用的基本邏輯單位。事務性質:原子性、l 原子性。即不可分割性,事務要么全部被執行,要么就全部不被執行。l 一致性或可串性。事務的執行使得數據庫從一種正確狀態轉換成另一種正確狀態l 隔離性。在事務正確提交之前,不允許把該事務對數據的任何改變提供給任何其他事務,l 持久性。事務正確提交后,其結果將永久保存在數據庫中,即使在事務提交后有了其他故障,事務的處理結果也會得到保存。10. 鎖:共享鎖、互斥鎖兩段鎖協議:階段:加鎖階段 階段:解鎖階段11. 死鎖及處理:事務循環等待數據鎖,則會死鎖。死鎖處理:預防死鎖協議,死鎖恢復機制12. 存儲過程:存儲過程就是編譯好了的一些sql語句。1.存儲過程因為SQL語句已經預編繹過了,因此運行的速度比較快。2. 可保證數據的安全性和完整性。通過存儲過程可以使沒有權限的用戶在控制之下間接地存取數據庫,從而保證數據的安全。通過存儲過程可以使相關的動作在一起發生,從而可以維護數據庫的完整性。3.可以降低網絡的通信量。存儲過程主要是在服務器上運行,減少對客戶機的壓力。4:存儲過程可以接受參數、輸出參數、返回單個或多個結果集以及返回值。可以向程序返回錯誤原因5:存儲過程可以包含程序流、邏輯以及對數據庫的查詢。同時可以實體封裝和隱藏了數據邏輯。13. 觸發器: 當滿足觸發器條件,則系統自動執行觸發器的觸發體。觸發時間:有before,after.觸發事件:有insert,update,delete三種。觸發類型:有行觸發、語句觸發14.內聯接,外聯接區別?內連接是保證兩個表中所有的行都要滿足連接條件,而外連接則不然。在外連接中,某些不滿條件的列也會顯示出來,也就是說,只限制其中一個表的行,而不限制另一個表的行。分左連接、右連接、全連接三種SQL試題2一、教師號星期號是否有課有有有有有寫一條sql語句讓你變為這樣的表教師號星期一星期二星期三各星期下的數字表示:對應的教師在星期幾已經排的課數二、書表(books)book_id,book_name,creatdate,Lastmodifydate,decription001,三個人的世界,2005-02-02,2005-07-07,NULL作者表(authors)A_id,A_name01,王紛02,李尚03,泰和部門表(depts)d_id,d_name001,編輯一部002,編輯二部003,編輯三部書和作者關聯表(bookmap)book_id,A_id001,01001,02001,03部門和作者關聯表(depmap)d_id,a_id001,01002,02003,03找出每個部門的所寫的總書兩,比如,一本書有3個人寫,如果三個人在不同的部門,則每個部門的總數量就是1.最后結果如下:部門,書量編輯一部,1編輯二部,1編輯三部,1三、兩個表情況表名:wu_planID plan model corp_code plannum prixis1 00001 exx22 nokia 2000 02 00002 lc001 sony 3000 0表名:wu_bomID plan pact amount1 00001 aa1 3002 00001 aa2 2003 00002 bb1 5004 00002 bb2 8005 00002 bb3 400查詢這兩個表中plan唯一,每一個plan中,amount最少的,plannum大于prixis的記錄結果是:ID plan model corp_code plannum prixis pact amount1 00001 exx22 nokia 2000 0 a2 2002 00002 lc001 sony 3000 0 bb3 400四、表1結構如下:部門 條碼 品名 銷售額 銷售數量 銷售日期表2結構如下課別 部門要求:先按部門排序,再按銷售額、銷售數量排序檢索出某個課別每個部門一個時期內的商品銷售額的前三名,如查詢01課別2007年4月15日到2007年4月22日每個部門一個周內的商品銷售額合計的前三名SQL 面試題目匯總1觸發器的作用?答:觸發器是一中特殊的存儲過程,主要是通過事件來觸發而被執行的。它可以強化約束,來維護數據的完整性和一致性,可以跟蹤數據庫內的操作從而不允許未經許可的更新和變化。可以聯級運算。如,某表上的觸發器上包含對另一個表的數據操作,而該操作又會導致該表觸發器被觸發。2。什么是存儲過程?用什么來調用?答:存儲過程是一個預編譯的SQL語句,優點是允許模塊化的設計,就是說只需創建一次,以后在該程序中就可以調用多次。如果某次操作需要執行多次SQL,使用存儲過程比單純SQL語句執行要快。可以用一個命令對象來調用存儲過程。3。索引的作用?和它的優點缺點是什么?答:索引就一種特殊的查詢表,數據庫的搜索引擎可以利用它加速對數據的檢索。它很類似與現實生活中書的目錄,不需要查詢整本書內容就可以找到想要的 數據。索引可以是唯一的,創建索引允許指定單個列或者是多個列。缺點是它減慢了數據錄入的速度,同時也增加了數據庫的尺寸大小。3。什么是內存泄漏?答:一般我們所說的內存泄漏指的是堆內存的泄漏。堆內存是程序從堆中為其分配的,大小任意的,使用完后要顯示釋放內存。當應用程序用關鍵字new等 創建對象時,就從堆中為它分配一塊內存,使用完后程序調用free或者delete釋放該內存,否則就說該內存就不能被使用,我們就說該內存被泄漏了。4。維護數據庫的完整性和一致性,你喜歡用觸發器還是自寫業務邏輯?為什么?答:我是這樣做的,盡可能使用約束,如check,主鍵,外鍵,非空字段等來約束,這樣做效率最高,也最方便。其次是使用觸發器,這種方法可以保證,無論什么業務系統訪問數據庫都可以保證數據的完整新和一致性。最后考慮的是自寫業務邏輯,但這樣做麻煩,編程復雜,效率低下。5。什么是事務?什么是鎖?答:事務就是被綁定在一起作為一個邏輯工作單元的SQL語句分組,如果任何一個語句操作失敗那么整個操作就被失敗,以后操作就會回滾到操作前狀態,或者是上有個節點。為了確保要么執行,要么不執行,就可以使用事務。要將有組語句作為事務考慮,就需要通過ACID測試,即原子性,一致性,隔離性和持久性。鎖:在所以的DBMS中,鎖是實現事務的關鍵,鎖可以保證事務的完整性和并發性。與現實生活中鎖一樣,它可以使某些數據的擁有者,在某段時間內不能使用某些數據或數據結構。當然鎖還分級別的。6。什么叫視圖?游標是什么?答:視圖是一種虛擬的表,具有和物理表相同的功能。可以對視圖進行增,改,查,操作,試圖通常是有一個表或者多個表的行或列的子集。對視圖的修改不影響基本表。它使得我們獲取數據更容易,相比多表查詢。游標:是對查詢出來的結果集作為一個單元來有效的處理。游標可以定在該單元中的特定行,從結果集的當前行檢索一行或多行。可以對結果集當前行做修改。一般不使用游標,但是需要逐條處理數據的時候,游標顯得十分重要。7。為管理業務培訓信息,建立3個表:S(S#,SN,SD,SA)S#,SN,SD,SA分別代表學號,學員姓名,所屬單位,學員年齡C(C#,CN)C#,CN分別代表課程編號,課程名稱SC(S#,C#,G) S#,C#,G分別代表學號,所選的課程編號,學習成績(1)使用標準SQL嵌套語句查詢選修課程名稱為稅收基礎的學員學號和姓名?答案:select s# ,sn from s where S# in(select S# from c,scwhere c.c#=sc.c# and cn=稅收基礎)(2) 使用標準SQL嵌套語句查詢選修課程編號為C2的學員姓名和所屬單位?答:select sn,sd from s,sc where s.s#=sc.s# and sc.c#=c2(3) 使用標準SQL嵌套語句查詢不選修課程編號為C5的學員姓名和所屬單位?答:select sn,sd from s where s# not in(select s# from scwhere c#=c5)(4)查詢選修了課程的學員人數答:select 學員人數=count(distinct s#)from sc(5) 查詢選修課程超過5門的學員學號和所屬單位?答:select sn,sd from s where s# in(select s# from sc groupby s# having count(distinct c#)5)目前在職場中很難找到非常合格的數據庫開發人員。有人說:“SQL開發是一門語言,它很容易學,但是很難掌握。”華為/sql-1981.html在面試過程中多次碰到兩道SQL查詢的題目,一是查詢A(ID,Name)表中第31至40條記錄,ID作為主鍵可能是不是連續增長的列,完整的查詢語句如下:select top 10 * from A where ID (select max(ID) from(select top 30 ID from A order by A ) T) order by A另外一道題目的要求是查詢表A中存在ID重復三次以上的記錄,完整的查詢語句如下:select * from(select count(ID) as count from table group by ID)T whereT.count3以上兩道題目非常有代表意義,望各位把自己碰到的有代表的查詢都貼上來。create table testtable1(id int IDENTITY,department varchar(12)select * from testtable1insert into testtable1 values(設計)insert into testtable1 values(市場)insert into testtable1 values(售后)/*結果id department1 設計2 市場3 售后*/create table testtable2(id int 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語句,怎么顯示如下結果id dptID department name1 1 設計 張三2 1 設計 李四3 2 市場 王五4 3 售后 彭六5 4 黑人 陳七*/答案是:SELECT testtable2.* , ISNULL(department,黑人)FROM testtable1 right join testtable2 on testtable2.dptID = testtable1.ID在面試應聘的SQL Server數據庫開發人員時,我運用了一套標準的基準技術問題。下面這些問題是我覺得能夠真正有助于淘汰不合格應聘者的問題。它們按照從易到難的順序排列。當你問到關于主鍵和外鍵的問題時,后面的問題都十分有難度,因為答案可能會更難解釋和說明,尤其是在面試的情形下。你能向我簡要敘述一下SQL Server 2000中使用的一些數據庫對象嗎?你希望聽到的答案包括這樣一些對象:表格、視圖、用戶定義的函數,以及存儲過程;如果他們還能夠提到像觸發器這樣的對象就更好了。如果應聘者不能回答這個基本的問題,那么這不是一個好兆頭。NULL是什么意思?NULL(空)這個值是數據庫世界里一個非常難纏的東西,所以有不少應聘者會在這個問題上跌跟頭您也不要覺得意外。NULL這個值表示UNKNOWN(未知):它不表示“”(空字符串)。假設您的SQL Server數據庫里有ANSI_NULLS,當然在默認情況下會有,對NULL這個值的任何比較都會生產一個NULL值。您不能把任何值與一個 UNKNOWN值進行比較,并在邏輯上希望獲得一個答案。您必須使用IS NULL操作符。什么是索引?SQL Server 2000里有什么類型的索引?任何有經驗的數據庫開發人員都應該能夠很輕易地回答這個問題。一些經驗不太多的開發人員能夠回答這個問題,但是有些地方會說不清楚。簡單地說,索引是一個數據結構,用來快速訪問數據庫表格或者視圖里的數據。在SQL Server里,它們有兩種形式:聚集索引和非聚集索引。聚集索引在索引的葉級保存數據。這意味著不論聚集索引里有表格的哪個(或哪些)字段,這些字段都 會按順序被保存在表格。由于存在這種排序,所以每個表格只會有一個聚集索引。非聚集索引在索引的葉級有一個行標識符。這個行標識符是一個指向磁盤上數據的指針。它允許每個表格有多個非聚集索引。什么是主鍵?什么是外鍵?主鍵是表格里的(一個或多個)字段,只用來定義表格里的行;主鍵里的值總是唯一的。外鍵是一個用來建立兩個表格之間關系的約束。這種關系一般都涉及一個表格里的主鍵字段與另外一個表格(盡管可能是同一個表格)里的一系列相連的字段。那么這些相連的字段就是外鍵。什么是觸發器?SQL Server 2000有什么不同類型的觸發器?讓未來的數據庫開發人員知道可用的觸發器類型以及如何實現它們是非常有益的。觸發器是一種專用類型的存儲過程,它被捆綁到SQL Server 2000的表格或者視圖上。在SQL Server 2000里,有INSTEAD-OF和AFTER兩種觸發器。INSTEAD-OF觸發器是替代數據操控語言(Data Manipulation Language,DML)語句對表格執行語句的存儲過程。例如,如果我有一個用于TableA的INSTEAD-OF-UPDATE觸發器,同時對這個 表格執行一個更新語句,那么INSTEAD-OF-UPDATE觸發器里的代碼會執行,而不是我執行的更新語句則不會執行操作。AFTER觸發器要在DML語句在數據庫里使用之后才執行。這些類型的觸發器對于監視發生在數據庫表格里的數據變化十分好用。您如何確一個帶有名為Fld1字段的TableB表格里只具有Fld1字段里的那些值,而這些值同時在名為TableA的表格的Fld1字段里?這個與關系相關的問題有兩個可能的答案。第一個答案(而且是您希望聽到的答案)是使用外鍵限制。外鍵限制用來維護引用的完整性。它被用來確保表格里 的字段只保存有已經在不同的(或者相同的)表格里的另一個字段里定義了的值。這個字段就是候選鍵(通常是另外一個表格的主鍵)。另外一種答案是觸發器。觸發器可以被用來保證以另外一種方式實現與限制相同的作用,但是它非常難設置與維護,而且性能一般都很糟糕。由于這個原因,微軟建議開發人員使用外鍵限制而不是觸發器來維護引用的完整性。對一個投入使用的在線事務處理表格有過多索引需要有什么樣的性能考慮?你正在尋找進行與數據操控有關的應聘人員。對一個表格的索引越多,數據庫引擎用來更新、插入或者刪除數據所需要的時間就越多,因為在數據操控發生的時候索引也必須要維護。你可以用什么來確保表格里的字段只接受特定范圍里的值?這個問題可以用多種方式來回答,但是只有一個答案是“好”答案。您希望聽到的回答是Check限制,它在數據庫表格里被定義,用來限制輸入該列的值。觸發器也可以被用來限制數據庫表格里的字段能夠接受的值,但是這種辦法要求觸發器在表格里被定義,這可能會在某些情況下影響到性能。因此,微軟建議使用Check限制而不是其他的方式來限制域的完整性。如果應聘者能夠正確地回答這個問題,那么他的機會就非常大了,因為這表明他們具有使用存儲過程的經驗。返回參數總是由存儲過程返回,它用來表示存儲過程是成功還是失敗。返回參數總是INT數據類型。OUTPUT參數明確要求由開發人員來指定,它可以返回其他類型的數據,例如字符型和數值型的值。(可以用作輸出參數的數據類型是有一些限制的。)您可以在一個存儲過程里使用多個OUTPUT參數,而您只能夠使用一個返回參數。什么是相關子查詢?如何使用這些查詢?經驗更加豐富的開發人員將能夠準確地描述這種類型的查詢。相關子查詢是一種包含子查詢的特殊類型的查詢。查詢里包含的子查詢會真正請求外部查詢的值,從而形成一個類似于循環的狀況。數據庫面試一:SQL tuning 類1. 列舉幾種表連接方式Answer:等連接(內連接)、非等連接、自連接、外連接(左、右、全)Or hash join/merge join/nest loop(cluster join)/index join ?ORACLE 8i,9i 表連接方法。一般的相等連接: select * from a, b where a.id = b.id; 這個就屬于內連接。對于外連接:Oracle中可以使用“(+) ”來表示,9i可以使用LEFT/RIGHT/FULL OUTER JOINLEFT OUTER JOIN:左外關聯SELECT e.last_name, e.department_id, d.department_nameFROM employees eLEFT OUTER JOIN 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(+)結果為:所有員工及對應部門的記錄,包括沒有對應部門編號department_id的員工記錄。RIGHT OUTER JOIN:右外關聯SELECT e.last_name, e.department_id, d.department_nameFROM employees eRIGHT OUTER JOIN 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結果為:所有員工及對應部門的記錄,包括沒有任何員工的部門記錄。FULL OUTER JOIN:全外關聯SELECT e.last_name, e.department_id, d.department_nameFROM employees eFULL OUTER JOIN departments dON (e.department_id = d.department_id);結果為:所有員工及對應部門的記錄,包括沒有對應部門編號department_id的員工記錄和沒有任何員工的部門記錄。ORACLE8i是不直接支持完全外連接的語法,也就是說不能在左右兩個表上同時加上(+),下面是在ORACLE8i可以參考的完全外連接語法select t1.id,t2.id from table1 t1,table t2 wheret1.id=t2.id(+)unionselect t1.id,t2.id from table1 t1,table t2 wheret1.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;全外連接包含左、右兩個表的全部行,不管在另一邊的表中是否存在與它們匹配的行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;交叉連接生成笛卡爾積它不使用任何匹配或者選取條件,而是直接將一個數據源中的每個行與另一個數據源的每個行一一匹配select A.c1,B.c2 from A,B;2. 不借助第三方工具,怎樣查看sql的執行計劃I) 使用Explain Plan,查詢PLAN_TABLE;EXPLAIN PLANSET STATEMENT_ID=QUERY1FORSELECT *FROM aWHERE aa=1;SELECT operation, options, object_name, object_type, ID,parent_idFROM plan_tableWHERE STATEMENT_ID = QUERY1ORDER BY ID;II)SQLPLUS中的SET TRACE 即可看到Execution Plan StatisticsSET AUTOTRACE ON;3. 如何使用CBO,CBO與RULE的區別IF 初始化參數 OPTIMIZER_MODE = CHOOSE THEN (8I DEFAULT)IF 做過表分析THEN 優化器 Optimizer=CBO(COST); /*高效*/ELSE優化器 Optimizer=RBO(RULE); /*高效*/END IF;END IF;區別:RBO根據規則選擇最佳執行路徑來運行查詢。CBO根據表統計找到最低成本的訪問數據的方法確定執行計劃。使用CBO需要注意:I) 需要經常對表進行ANALYZE命令進行分析統計;II) 需要穩定執行計劃;III)需要使用提示(Hint);使用RULE需要注意:I) 選擇最有效率的表名順序II) 優化SQL的寫法;在optimizer_mode=choose時,如果表有統計信息(分區表外),優化器將選擇CBO,否則選RBO。RBO遵循簡單的分級方法學,使用15種級別要點,當接收到查詢,優化器將評估使用到的要點數目,然后選擇最佳級別(最少的數量)的執行路徑來運行查詢。CBO嘗試找到最低成本的訪問數據的方法,為了最大的吞吐量或最快的初始響應時間,計算使用不同的執行計劃的成本,并選擇成本最低的一個,關于表的數據內容的統計被用于確定執行計劃。4. 如何定位重要(消耗資源多)的SQL使用CPU多的用戶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$sesstat 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 andbuffer_gets/executions 30000);5. 如何跟蹤某個session的SQL利用TRACE 跟蹤ALTER SESSION SET SQLTRACE ON;COLUMN SQL format a200;SELECT machine, sql_text SQLFROM v$sqltext a, v$session bWHERE address = sql_addressAND machine = &AORDER BY hash_value, piece;execdbms_system.set_sql_trace_in_session(sid,serial#,&sql_trace);select sid,serial# from v$session where sid = (select sidfrom v$mystat where rownum = 1);exec dbms_system.set_ev(&sid,&serial#,&event_10046,&level_12,”);6. SQL調整最關注的是什么檢查系統的I/O問題sard能檢查整個系統的iostat(IO statistics)查看該SQL的response time(db blockgets/consistent gets/physical reads/sorts (disk)7. 說說你對索引的認識(索引的結構、對dml影響、對查詢影響、為什么提高查詢性能)索引有B-TREE、BIT、CLUSTER等類型。ORACLE使用了一個復雜的自平衡B-tree結構;通常來說,在表上建立恰當的索引,查詢時會改 進查詢性能。但在進行插入、刪除、修改時,同時會進行索引的修改,在性能上有一定的影響。有索引且查詢條件能使用索引時,數據庫會先度取索引,根據索引內容和查詢條件,查詢出ROWID,再根據ROWID取出需要的數據。由于索引內容通常比全表內容要少很多,因此通過先讀索引,能減少I/O,提高查詢性 能。b-tree index/bitmap index/function index/patitionalindex(local/global)索引通常能提高select/update/delete的性能,會降低insert的速度,8. 使用索引查詢一定能提高查詢的性能嗎?為什么通常,通過索引查詢數據比全表掃描要快.但是我們也必須注意到它的代價.索引需要空間來存儲,也需要定期維護, 每當有記錄在表中增減或索引列被修改時,索引本身也會被修改. 這意味著每條記錄的INSERT,DELETE,UPDATE將為此多付出4,5 次的磁盤I/O. 因為索引需要額外的存儲空間和處理,那些不必要的索引反而會使查詢反應時間變慢.使用索引查詢不一定能提高查詢性能,索引范圍查詢(INDEX RANGE SCAN)適用于兩種情況:基于一個范圍的檢索,一般查詢返回結果集小于表中記錄數的30%宜采用;基于非唯一性索引的檢索索引就是為了提高查詢性能而存在的,如果在查詢中索引沒有提高性能,只能說是用錯了索引,或者講是場合不同9. 綁定變量是什么?綁定變量有什么優缺點?綁定變量是指在SQL語句中使用變量,改變變量的值來改變SQL語句的執行結果。優點:使用綁定變量,可以減少SQL語句的解析,能減少數據庫引擎消耗在SQL語句解析上的資源。提高了編程效率和可靠性。減少訪問數據庫的次數, 就能實際上減少ORACLE的工作量。缺點:經常需要使用動態SQL的寫法,由于參數的不同,可能SQL的執行效率不同;綁定變量是相對文本變量來講的,所謂文本變量是指在SQL直接書寫查詢條件,這樣的SQL在不同條件下需要反復解析,綁定變量是指使用變量來代替直接書寫條件,查詢bind value在運行時傳遞,然后綁定執行。優點是減少硬解析,降低CPU的爭用,節省shared_pool缺點是不能使用histogram,sql優化比較困難10. 如何穩定(固定)執行計劃可以在SQL語句中指定執行計劃。使用HINTS;query_rewrite_enabled = truestar_transformation_enabled = trueoptimizer_features_enable =9.2.0創建并使用stored outline11. 和排序相關的內存在8i和9i分別怎樣調整,臨時表空間的作用是什么SORT_AREA_SIZE 在進行排序操作時,如果排序的內容太多,內存里不能全部放下,則需要進行外部排序,此時需要利用臨時表空間來存放排序的中間結果。8i中sort_area_size/sort_area_retained_size決定了排序所需要的內存,如果排序操作不能在sort_area_size中完成,就會用到temp表空間9i中如果workarea_size_policy=auto時,排序在pga內進行,通常pga_aggregate_target的1/20可以用來進行disk sort;如果workarea_size_policy=manual時,排序需要的內存由sort_area_size決定, 在執行order by/groupby/distinct/union/create index/index rebuild/minus等操作

溫馨提示

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

評論

0/150

提交評論