常見資料庫面試題目

2021-03-31 14:17:20 字數 4723 閱讀 8214

常問的面試題彙總:

1、怎麼在儲存過程中使用臨時表?

在oracle中,臨時表分為session、transaction兩種,session級的臨時表資料在整個session都存在,直到結束此次session;而 transaction級的臨時表資料在tranaction結束後消失,即***mit/rollback或結束session都會清除 tranaction臨時表資料。

1、on ***mit delete rows 說明臨時表是事務指定,每次提交後oracle將截斷表(刪除全部行)

2、on ***mit preserve rows 說明臨時表是會話指定,當中斷會話時oracle將截斷表。

3、臨時表(無論會話級還是事務級)中的資料都是會話隔離的,不同session之間不會共享資料。

4、在儲存中使用事務級臨時表時,注意***mit前刪除掉本事務的資料,否則可能會出現資料不斷增加的情況(原因尚未搞明白)。

5、兩種臨時表的語法:

create global temporary table 臨時表名 on ***mit preserve|delete rows;

用preserve時就是session級的臨時表,

用delete就是transaction級的臨時表。

6、特性和效能(與普通表和檢視的比較)

臨時表只在當前連線內有效;

臨時表不建立索引,所以如果資料量比較大或進行多次查詢時,不推薦使用;

資料處理比較複雜的時候時表快,反之檢視快點;

在僅僅查詢資料的時候建議用游標: open cursor for 'sql clause';

2、口述一下儲存過程的寫法

基本結構+儲存名+輸出變數+ is +begin 開始+操作語句 +end 結束

create or replace procedure fun_xsremobile

(par_intinterid_c number,

par_lngmobile_c number,

date_c number)

isbegin

select * from (

select id, cpid, mobstate, settled, senddate, rececount, islocked, gateid, extdata,recets

from tb_prd_ofr where interid =par_intinterid_c and mobile =par_lngmobile_c and senddate>=date_c

order by id desc)

whererownum=1;

end;

3、你了解oracle表分割槽嗎?它有什麼優缺點

分割槽表:

當表中的資料量不斷增大,查詢資料的速度就會變慢,應用程式的效能就會下降,這時就應該考慮對錶進行分割槽。表進行分割槽後,邏輯上表仍然是一張完整的表,只是將表中的資料在物理上存放到多個表空間(物理檔案上),這樣查詢資料時,不至於每次都掃瞄整張表。

表分割槽的具體作用

oracle的表分割槽功能通過改善可管理性、效能和可用性,從而為各式應用程式帶來了極大的好處。通常,分割槽可以使某些查詢以及維護操作的效能大大提高。此外,分割槽還可以極大簡化常見的管理任務,分割槽是構建千兆位元組資料系統或超高可用性系統的關鍵工具。

分割槽功能能夠將表、索引或索引組織表進一步細分為段,這些資料庫物件的段叫做分割槽。每個分割槽有自己的名稱,還可以選擇自己的儲存特性。從資料庫管理員的角度來看,乙個分割槽後的物件具有多個段,這些段既可進行集體管理,也可單獨管理,這就使資料庫管理員在管理分割槽後的物件時有相當大的靈活性。

但是,從應用程式的角度來看,分割槽後的表與非分割槽表完全相同,使用 sql dml 命令訪問分割槽後的表時,無需任何修改。

什麼時候使用分割槽表:

1、表的大小超過2gb。

2、表中包含歷史資料,新的資料被增加都新的分割槽中。

必須要建表之前就建立

表分割槽有以下優點:

1、改善查詢效能:對分割槽物件的查詢可以僅搜尋自己關心的分割槽,提高檢索速度。

2、增強可用性:如果表的某個分割槽出現故障,表在其他分割槽的資料仍然可用;

3、維護方便:如果表的某個分割槽出現故障,需要修復資料,只修復該分割槽即可;

4、均衡i/o:可以把不同的分割槽對映到磁碟以平衡i/o,改善整個系統效能。

缺點:分割槽表相關:已經存在的表沒有方法可以直接轉化為分割槽表。不過 oracle 提供了**重定義表的功能。

4、oracle表分割槽的分割槽型別有哪幾種?它們的操作方法你知道嗎?..

oracle分割槽表分為四類:範圍分割槽表;列表分割槽表;雜湊分割槽表;組合分割槽表

5、談談你對執行計畫的理解,你主要看執行計畫的哪部分?

6、你對sql語句優化有何看法,能說出幾種優化方法嗎?

說到優化,主講會索引和分割槽,引導到講索引上去,索引要好好熟悉和使用。

索引優化規則:

1. like件中不要以萬用字元(wildcard)開始,否則索引將不被採用.

2. 避免在索引列上使用計算或改變索引列的型別或使用『!=』及<>

3. 避免在索引列上使用not .

4. 用》=替代》 .

高效: select * from emp where deptno >=4

低效: select * from emp where deptno >3

兩者的區別在於, 前者dbms將直接跳到第乙個dept等於4的記錄而後者將首先定位到deptno=3的記錄並且向前掃瞄到第乙個dept大於3的記錄.

5. 用union替換or (適用於索引列)

通常情況下, 用union替換where子句中的or將會起到較好的效果. 對索引列使用or將造成全表掃瞄. 注意, 以上只針對多個索引列有效.

如果有column沒有被索引, 查詢效率可能會因為你沒有選擇o規則r而降低.

6. 避免在索引列上使用is null和is not null

避免在索引中使用任何可以為空的列,oracle將無法使用該索引 .對於單列索引,如果列包含空值,索引中將不存在此記錄. 對於復合索引,如果每個列都為空,索引中同樣不存在此記錄.如果至少有乙個列不為空,則記錄存在於索引中.

(建議:可以給null值的字段設定乙個預設值))

7. 如果索引是建立在多個列上,索引時段需要放在where 條件的第乙個條件(oracle8i之前),oracle8i之後允許跳躍式索引.

8. (可能的話)用union-all 替換union.

union-all就是做簡單的合併,不會進行排序,union先做簡單的合併,然後做進行排序,最後去除重複的記錄。

9. 避免使用耗費資源的操作

帶有distinct,union ,minus,intersect,order by的sql語句會啟動sql引擎.

執行耗費資源的排序(sort)功能. distinct需要一次排序操作, 而其他的至少需要執行兩次排序.

例如,乙個union查詢,其中每個查詢都帶有group by子句, group by會觸發嵌入排序(nested sort) ; 這樣, 每個查詢需要執行一次排序, 然後在執行union時, 又乙個唯一排序(sort unique)操作被執行而且它只能在前面的嵌入排序結束後才能開始執行. 嵌入的排序的深度會大大影響查詢的效率.

通常, 帶有union, minus , intersect的sql語句都可以用其他方式重寫.

7、oracle優化器內部處理的表連線方式知道嗎?有哪幾種?

表的連線是指在乙個sql語句中通過表與表之間的關聯,從乙個或多個表檢索出相關的資料。連線是通過sql語句中from從句的多個表名,以及where從句裡定義的表之間的連線條件來實現的。如果乙個sql語句的關聯表超過兩個,那麼連線的順序如何呢?

oracle首先連線其中的兩個表,產生乙個結果集;然後將產生的結果集與下乙個表再進行關聯;繼續這個過程,直到所有的表都連線完成;最後產生所需的資料。

巢狀迴圈連線(nested loop join)

群集連線(cluster join)

排序合併連線(sort merge join)

笛卡爾連線(cartesian join)

雜湊連線(hash join)。

索引連線(index join)。

8、會使用開窗函式嗎?說一下你對開窗函式、聚合函式、分析函式的理解

分析函式用於計算基於組的某種聚合值,它和聚合函式的不同之處是

對於每個組返回多行,而聚合函式對於每個組只返回一行。

開窗函式指定了分析函式工作的資料視窗大小,這個資料視窗大小可能會隨著行的變化而變

9、游標的屬性有哪幾種?顯式游標和隱式游標的使用方式分別是什麼?

屬性sql%isopen返回的型別為布林型,判斷游標是否被開啟,如果開啟%isopen等於true,否則等於false,即執行過程中為真,結束後為假。

sql%notfound返回值為布林型,判斷游標所在的行是否有效,如果有效,則%foundd等於true,否則等於false,即與%found屬性返回值相反。

sql%found返回值的型別為布林型,值為true代表插入刪除更新或單行查詢操作成功。 sql%rowcount返回值型別為整型,返回當前位置為止游標讀取的記錄行數,即成功執行的資料行數。

顯示游標:宣告游標,開啟游標,提取資料,關閉游標

隱式游標,當查詢開始時隱式游標開啟,查詢結束時隱式游標自動關閉

10、plsql塊怎麼捕捉到異常?你能說出幾個常見的預定義異常嗎?

定義異常

丟擲異常

捕獲及處理異常

oracle中出現錯誤的情形通常分為編譯時錯誤(***pile-timeerror)和執行時錯誤(run-time error),異常是在pl/sql執行過程中出現的警告或錯誤。

資料庫面試題

維護資料庫的完整性 一致性 你喜歡用觸發器還是自寫業務邏輯?為什麼?答 盡可能用約束 包括check 主鍵 唯一鍵 外來鍵 非空字段 實現,這種方式的效率最好 其次用觸發器,這種方式可以保證無論何種業務系統訪問資料庫都能維持資料庫的完整性 一致性 最後再考慮用自寫業務邏輯實現,但這種方式效率最低 程...

常問的資料庫面試題目

目前在職場中很難找到非常合格的資料庫開發人員。我的乙個同事曾經說過 sql開發是一門語言,它很容易學,但是很難掌握。在面試應聘的sql server資料庫開發人員時,我運用了一套標準的基準技術問題。下面這些問題是我覺得能夠真正有助於淘汰不合格應聘者的問題。它們按照從易到難的順序排列。當您問到關於主鍵...

資料庫面試題 SQL ORACLE

資料庫基礎 面試常見題 一 資料庫基礎 1.資料抽象 物理抽象 概念抽象 檢視級抽象,內模式 模式 外模式 2.sql語言包括資料定義 資料操縱 data manipulation 資料控制 data control 資料定義 create table,alter table,drop table,...