面試整理之MYSQL

數據庫的基本要素(ACID)

  1. 原子性(Atomicity):事務開始後所有操作,要麼全部做完,要麼全部不做
  2. 一致性(Consistency):事務開始前和結束後,數據庫的完整性約束沒有被破壞
  3. 隔離性(Isolation):同一時間,只允許一個事務請求同一數據,不同的事務之間彼此沒有任何干擾
  4. 持久性(Durability):事務完成後,事務對數據庫的所有更新將被保存到數據庫,不能回滾

數據庫的隔離級別

  1. 讀未提交(read-uncommit) 會導致的併發問題 髒讀、不可重複度、幻讀
  2. 讀已提交(read-commit) 會導致的併發問題 不可重複度、幻讀
  3. 可重複讀(repeatable-read) 會導致的併發問題 幻讀
  4. 串行化 沒有併發問題

mysql默認的事務隔離級別爲可重複讀
使用命令查看:

mysql> select @@tx_isolation

鎖是計算機協調多個進程或線程併發訪問某一資源的機制。
鎖保證數據的併發訪問的一致性、有效性。
鎖衝突也是影響數據庫併發訪問性能的一個重要因素。
鎖是MySQL在服務器層和存儲引擎層的併發控制。
加鎖是消耗資源的,鎖的各種操作,包括獲得鎖、檢測鎖是否是否已解除、釋放鎖等。

  1. 鎖分類
    共享鎖(讀鎖):其他事務可以讀,但不能寫。
    排他鎖(寫鎖):其他事物不能讀取,也不能寫。

  2. 鎖粒度
    MySQL 不同的存儲引擎支持不同的鎖機制,所有的存儲引擎都以自己的方式顯現了鎖機制,服務器層完全不瞭解存儲引擎中的鎖實現:

    MyISAM 和 MEMORY 存儲引擎採用的是表級鎖(table-level locking)
    BDB 存儲引擎採用的是頁面鎖(page-level locking),但也支持表級鎖
    InnoDB 存儲引擎既支持行級鎖(row-level locking),也支持表級鎖,但 默認情況下是採用行級鎖。

    默認情況下,表鎖和行鎖都是自動獲得的, 不需要額外的命令。

InnoDB鎖參照
詳細參照:https://www.cnblogs.com/volcano-liu/p/9890832.html

知乎參照:https://zhuanlan.zhihu.com/p/29150809

索引

主要針對HASH B+TREE數據結構理解

1、爲什麼默認都使用B+TREE,相對於BTREE的優劣勢

2、什麼情況下使用HASH
特點:

1.檢索效率搞,索引的檢索可以一次定位,不像B-Tree索引需要從根節點到枝節點,需要多次IO訪問。
2.由於Hash索引比較的是進行Hash運算之後的Hash值,所以即使取滿足某個Hash鍵值的數據的記錄條數,也無法從Hash索引中直接完成查詢,還是要通過訪問表中的實際數據進行相應的比較,並得到相應的結果。因此,在任何時候都不能避免表掃描。
3.僅支持精確查詢,例如:"=",“IN"和”<=>",不能使用範圍查詢:由於Hash索引比較的是進行Hash運算之後的Hash值,無法判斷返回,所以它只能用於等值的過濾,不能用於基於範圍的過濾。
4.不支持排序:由於Hash索引中存放的是經過Hash計算之後的Hash值,而且Hash值的大小關係並不一定和Hash運算前的鍵值完全一樣,所以數據庫無法利用索引的數據來避免任何排序運算。
5.只有Memory引擎支持顯式的Hash索引,但是它的Hash是nonunique的,衝突太多時也會影響查找性能。Memory引擎默認的索引類型即是Hash索引,雖然它也支持B-Tree索引

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章