14 個必須掌握的數據庫面試問題

本文總結了 14 個必須掌握的數據庫面試題,附答案,快看看是否對你有幫助!

1 爲什麼使用數據索引能提高效率

2 B + 樹索引和哈希索引的區別

B + 樹是一個平衡的多叉樹,從根節點到每個葉子節點的高度差值不超過 1, 而且同層級的節點間有指針相互鏈接,是有序的,如下圖:

哈希索引就是採用一定的哈希算法,把鍵值換算成新的哈希值,檢索時不需要類似 B + 樹那樣從根節點到葉子節點逐級查找,只需一次哈希算法即可, 是無序的,如下圖所示:

3 哈希索引的優勢

等值查詢,哈希索引具有絕對優勢 (前提是: 沒有大量重複鍵值,如果大量重複鍵值時,哈希索引的效率很低,因爲存在所謂的哈希碰撞問題。

4 哈希索引不適用的場景

5 什麼是表分區?

表分區,是指根據一定規則,將數據庫中的一張表分解成多個更小的,容易管理的部分。從邏輯上看,只有一張表,但是底層卻是由多個物理分區組成

6 表分區與分表的區別?

分表:指的是通過一定規則, 將一張表分解成多 張不同的表。比如將用戶訂單記錄根據時間成多個表。

分表與分區的區別在於: 分區從邏輯上來講只有一張表 , 而分表則是將一張表分解成多張表。

7 表分區有什麼好處?

8 在 MVCC 併發控制中, 讀操作可以分成兩類

快照讀 (snapshot read): 讀取的是記錄的可見版本 (有可能是歷史版本),不用加鎖 (共享讀鎖 s 鎖也不加,所以不會阻塞其他事務的寫)

當前讀 (currentread): 讀取的是記錄的最新版本,並且,當前讀返回的記錄,都會加上鎖,保證其他事務不會再併發修改這條記錄

9 行級鎖定的優點

10 行級鎖定的缺點

比頁級或表級鎖定佔用更多的內存。當在表的大部分中使用時,比頁級或表級鎖定速度慢,因爲你必須獲取更多的鎖。如果你在大部分數據上經常進行 GROUP BY 操作或者必須經常掃描整個表,比其它鎖定明顯慢很多。用高級別鎖定,通過支持不同的類型鎖定, 你也可以很容易地調節應用程序,因爲其鎖成本小於行級鎖定。

11 MySQL 優化

prepared statements 獲得很多好處,無論是性能問題還是安全問題。

Prepared Statements 可以檢查一些你綁定好的變量,這樣可以保護你的程序不會受到 “SQL 注入式” 攻擊

12 key 和 index 的區別

key 是數據庫的物理結構,它包含兩層意義和作用,一是約束 (偏 重於約束和規範數據庫的結構完整性) , 二是索引 (輔助查詢 用的)。包括 primary key, unique key, foreign key 等

index 是數據庫的物理結構,它只是輔助查詢的,它創建時會在另外的表空間 (mysql 中的 innodb 表空間) 以 - 個類似目錄的結 構存儲。索引要分類的話,分爲前綴索引、全文本索引等;

13 Mysql 中 MyISAM 和 InnoDB 的區別有哪些?

14 數據庫表創建注意事項

1、字段名及字段配製合理性

2、系統特殊字段處理及建成後建議

3、表結構合理性配置

4、其它建議

來源:database.51cto.com/art/202010/628634.htm

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/HGDAQH3EaeU8UMz7sNsa_Q