校招數據庫筆試面試題彙總詳解

基礎概念

1. 什麼是數據庫事務?事務有什麼特色?

數據庫事務:是指做爲單個邏輯工做單元執行的一系列操做,這些操做要麼全作,要麼全不作,是一個不可分割的工做單元。html

事務特色面試

  • 原子性
  • 一致性
  • 隔離性
  • 持久性特

2. 主鍵和外鍵的區別?

  • 主鍵所在的列的值是惟一的,不可爲空的
  • 外鍵所在的列的值能夠重複,能夠爲空的,不能建立對應表中不存在的外鍵值

3. truncate與delete的區別?

比較 truncate delete
相同點 刪除表中的所有行 不帶where字句刪除表中的所有行
相同點 刪除記錄,不刪除表定義 刪除記錄,不刪除表定義
不一樣點 truncate比delete速度快,且使用系統和事務日誌資源少 delete每刪除一行,並在事務日誌中爲所刪除的每行記錄一項
不一樣點 truncate正常狀況返回0,中斷什麼都不返回 delete返回刪除的行記錄數

4. 索引的做用和優缺點?

做用:數據庫

  • 索引能夠大大提升系統檢索的性能

優勢:編程

  • 經過建立惟一性索引,能夠保證數據庫表中每一行數據的惟一性
  • 能夠大大加快 數據的檢索速度,這也是建立索引的最主要的緣由
  • 能夠加速表和表之間的鏈接,特別是在實現數據的參考完整性方面特別有意義
  • 在使用分組和排序 子句進行數據檢索時,一樣能夠顯著減小查詢中分組和排序的時間
  • 經過使用索引,能夠在查詢的過程當中,使用優化隱藏器,提升系統的性能

缺點:緩存

  • 建立索引和維護索引要耗費時間,這種時間隨着數據量的增長而增長
  • 索引須要佔物理空間,除了數據表佔數據空間以外,每個索引還要佔必定的物理空間,若是要創建聚簇索引,那麼須要的空間就會更大
  • 當對錶中的數據進行增長、刪除和修改的時候,索引也要動態的維護,這樣就下降了數據的維護速度

5. 建立索引都有哪些注意的事項

適合建立索引:安全

  • 在常常須要搜索的列上,能夠加快搜索的速度。
  • 在做爲主鍵的列上,強制該列的惟一性和組織表中數據的排列結構。
  • 在常常用在鏈接的列上,這 些列主要是一些外鍵,能夠加快鏈接的速度。
  • 在常常須要根據範圍進行搜索的列上建立索引,由於索引已經排序,其指定的範圍是連續的。
  • 在常常須要排序的列上建立索引,由於索引已經排序,這樣查詢能夠利用索引的排序,加快排序查詢時間。
  • 在常用在WHERE子句中的列上面建立索引,加快條件的判斷速度。

不適合建立索引:數據庫設計

  • 對於那些在查詢中不多使用或者參考的列不該該建立索引這是由於,既然這些列不多使用到,所以有索引或者無索引,並不能提升查詢速度。相反,因爲增長了索引,反而下降了系統的維護速度和增大了空間需求。ide

  • 對於那些只有不多數據值(惟一性差)的列也不該該增長索引。這是由於,因爲這些列的取值不多,例如人事表的性別列,在查詢的結果中,結果集的數據行佔了表中數據行的很大比例,即須要在表中搜索的數據行的比例很大。增長索引,並不能明顯加快檢索速度。模塊化

  • 對於那些定義爲text, image和bit數據類型的列不該該增長索引。這是由於,這些列的數據量要麼至關大,要麼取值不多。性能

  • 當修改性能遠遠大於檢索性能時,不該該建立索引。這是由於,修改性能和檢索性能是互相矛盾的。當增長索引時,會提升檢索性能,可是會下降修改性能。當減小索引時,會提升修改性能,下降檢索性能。所以,當修改性能遠遠大於檢索性能時,不該該建立索引。

6. SQL語句分爲哪幾類?

  • DDL(Data Definition Language):數據定義語言,定義對數據庫對象(庫、表、列、索引)的操做。表明指令:CREATE、DROP、ALTER、RENAME、 TRUNCATE等

  • DML(Data Manipulation Language):數據操做語言,定義對數據庫記錄的操做。表明指令:INSERT、DELETE、UPDATE、SELECT等

  • DCL(Data Control Language):數據控制語言,定義對數據庫、表、字段、用戶的訪問權限和安全級別。表明指令:GRANT、REVOKE,COMMIT、ROLLBACK、SAVEPOINT等

7. MySQL存儲引擎有哪些,各自有什麼特色?

  • 存儲引擎是:數據庫管理系統如何存儲數據、如何爲存儲的數據創建索引和如何更新、查詢數據等技術的實現方法。MySQL的核心就是插件式存儲引擎,支持多種存儲引擎。

  • 主要回答下表中MyISAM,InnoDB,Memory三個引擎便可,區別就是各自的Feature不同,標的標識該引擎支持對應的特性。

校招數據庫筆試面試題彙總詳解

8. MySQL都支持那些索引?

支持的索引以下:

  • 主鍵索引(primary key)
  • 惟一索引(unique)
  • 普通索引(index)
  • 全文索引(fulltext) (InnoDB引擎不支持全文索引,MyISAM引擎支持全文索引)

9. 什麼是存儲過程?

存儲過程是一個預編譯的SQL 語句,優勢是容許模塊化的設計,就是說只需建立一次,之後在該程序中就能夠調用屢次。若是某次操做須要執行屢次SQL ,使用存儲過程比單純SQL 語句執行要快。能夠用一個命令對象(call)來調用存儲過程。

10. 視圖的優缺點?

優勢:

  • 對數據庫的訪問,由於視圖能夠有選擇性的選取數據庫裏的一部分。
  • 用戶經過簡單的查詢能夠從複雜查詢中獲得結果。
  • 維護數據的獨立性,試圖可從多個表檢索數據。
  • 對於相同的數據可產生不一樣的視圖。
  • 視圖能夠提升安全性,必須具備足夠的訪問權限

缺點:

  • 性能影響,查詢視圖時,必須把視圖的查詢轉化成對基本表的查詢,若是這個視圖是由一個複雜的多表查詢所定義,那麼就沒法更改數據

11. 列舉幾種錶鏈接方式以及區別?

鏈接方式:

  • 內鏈接
  • 自鏈接
  • 外鏈接(左、右、全)
  • 交叉鏈接

鏈接方式說明:

  • 內鏈接:只有兩個元素表相匹配的才能在結果集中顯示。
  • 外鏈接:
    • 左外鏈接:左邊爲驅動表,驅動表的數據所有顯示,匹配表的不匹配的不會顯示。
    • 右外鏈接:右邊爲驅動表,驅動表的數據所有顯示,匹配表的不匹配的不會顯示。
    • 全外鏈接:鏈接的表中不匹配的數據所有會顯示出來。
  • 交叉鏈接: 笛卡爾效應,顯示的結果是連接表數的乘積。

12. 數據庫的三範式

範式:

  • 第一範式:當關系模式R的全部屬性都不能在分解爲更基本的數據單位時,稱R是知足第一範式的,簡記爲1NF。知足第一範式是關係模式規範化的最低要求,不然,將有不少基本操做在這樣的關係模式中實現不了。
  • 第二範式:若是關係模式R知足第一範式,而且R得全部非主屬性都徹底依賴於R的每個候選關鍵屬性,稱R知足第二範式,簡記爲2NF。
  • 第三範式:設R是一個知足第一範式條件的關係模式,X是R的任意屬性集,若是X非傳遞依賴於R的任意一個候選關鍵字,稱R知足第三範式,簡記爲3NF. 數據不能存在傳遞關係,即每一個屬性都跟主鍵有直接關係而不是間接關係。

參考資料:

實際使用:三大範式只是通常設計數據庫的基本理念,能夠創建冗餘較小、結構合理的數據庫。若是有特殊狀況,固然要特殊對待,數據庫設計最重要的是看需求和性能,需求>性能>表結構。因此不能一味的去追求範式創建數據庫

13. SQL的關鍵字執行順序

SQL查詢中各個關鍵字的執行前後順序:

from > on> join > where >  group by > with > having > select > distinct  > order by  > limit

參考資料:《MySQL技術內幕:SQL編程 第三章查詢處理》

場景分析

1. 若是有1000萬條數據,執行庫查詢時如何提升查詢效率?

問題分析:從1000萬這個數字能夠定位到考察數據量特別大的狀況下如何提高查詢效率。

  • 數據庫設計方面

    • 創建索引
    • 數據表分區
    • 儘可能使用固定長度的字段
    • 限制字段長度
    • 分表,分庫
  • 數據庫I/O方面

    • 增長緩衝器
    • 涉及表的級聯,不一樣的表存儲在不一樣的磁盤上,以增長I/O速度
    • 改善物理設備,好比更換固態硬盤
  • 在SQL語句方面

    • 優化SQL語句,較少比較次數
    • 限制返回的記錄數,進行分頁查詢
  • 在Java方面
    • 反覆查詢,使用preparedStatement減小查詢次數
    • 考慮數據緩存,較少數據庫訪問
相關文章
相關標籤/搜索