2018秋招數據庫筆試面試題匯總
1. 什麽是數據庫事務?事務有什麽特點?
數據庫事務:是指作為單個邏輯工作單元執行的一系列操作,這些操作要麽全做,要麽全不做,是一個不可分割的工作單元。
事務特點:
- 原子性
- 一致性
- 隔離性
- 持久性特
2. 主鍵和外鍵的區別?
- 主鍵所在的列的值是唯一的,不可為空的
- 外鍵所在的列的值可以重復,可以為空的,不能創建對應表中不存在的外鍵值
3. truncate與delete的區別?
比較 | truncate | delete |
---|---|---|
相同點 | 刪除表中的全部行 | 不帶where字句刪除表中的全部行 |
相同點 | 刪除記錄,不刪除表定義 | 刪除記錄,不刪除表定義 |
不同點 | truncate比delete速度快,且使用系統和事務日誌資源少 | delete每刪除一行,並在事務日誌中為所刪除的每行記錄一項 |
不同點 | truncate正常情況返回0,中斷什麽都不返回 | delete返回刪除的行記錄數 |
4. 索引的作用和優缺點?
作用:
- 索引可以大大提高系統檢索的性能
優點:
- 通過創建唯一性索引,可以保證數據庫表中每一行數據的唯一性
- 可以大大加快?數據的檢索速度,這也是創建索引的最主要的原因
- 可以加速表和表之間的連接,特別是在實現數據的參考完整性方面特別有意義
- 在使用分組和排序?子句進行數據檢索時,同樣可以顯著減少查詢中分組和排序的時間
- 通過使用索引,可以在查詢的過程中,使用優化隱藏器,提高系統的性能
缺點:
- 創建索引和維護索引要耗費時間,這種時間隨著數據量的增加而增加
- 索引需要占物理空間,除了數據表占數據空間之外,每一個索引還要占一定的物理空間,如果要建立聚簇索引,那麽需要的空間就會更大
- 當對表中的數據進行增加、刪除和修改的時候,索引也要動態的維護,這樣就降低了數據的維護速度
5. 創建索引都有哪些註意的事項
適合創建索引:
- 在經常需要搜索的列上,可以加快搜索的速度。
- 在作為主鍵的列上,強制該列的唯一性和組織表中數據的排列結構。
- 在經常用在連接的列上,這?些列主要是一些外鍵,可以加快連接的速度。
- 在經常需要根據範圍進行搜索的列上創建索引,因為索引已經排序,其指定的範圍是連續的。
- 在經常需要排序的列上創建索引,因為索引已經排序,這樣查詢可以利用索引的排序,加快排序查詢時間。
- 在經常使用在WHERE子句中的列上面創建索引,加快條件的判斷速度。
不適合創建索引:
-
對於那些在查詢中很少使用或者參考的列不應該創建索引。這是因為,既然這些列很少使用到,因此有索引或者無索引,並不能提高查詢速度。相反,由於增加了索引,反而降低了系統的維護速度和增大了空間需求。
-
對於那些只有很少數據值(唯一性差)的列也不應該增加索引。這是因為,由於這些列的取值很少,例如人事表的性別列,在查詢的結果中,結果集的數據行占了表中數據行的很大比例,即需要在表中搜索的數據行的比例很大。增加索引,並不能明顯加快檢索速度。
-
對於那些定義為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
減少查詢次數 - 考慮數據緩存,較少數據庫訪問
- 反復查詢,使用
2018秋招數據庫筆試面試題匯總