數據庫兩大神器【索引和鎖】

前言

只有光頭才能變強面試

索引和鎖在數據庫中能夠說是很是重要的知識點了,在面試中也會常常會被問到的。sql

本文力求簡單講清每一個知識點,但願你們看完能有所收穫數據庫

聲明:若是沒有說明具體的數據庫和存儲引擎,默認指的是MySQL中的InnoDB存儲引擎優化

1、索引

在以前,我對索引有如下的認知:spa

  • 索引能夠加快數據庫的檢索速度
  • 常常進行INSERT/UPDATE/DELETE操做就不要創建索引了,換言之:索引會下降插入、刪除、修改等維護任務的速度。
  • 索引須要佔物理和數據空間
  • 瞭解過索引的最左匹配原則
  • 知道索引的分類:彙集索引和非彙集索引
  • Mysql支持Hash索引和B+樹索引兩種

看起來好像啥都知道,但面試讓你說的時候可能就GG了:code

  • 使用索引爲何能夠加快數據庫的檢索速度啊?
  • 爲何說索引會下降插入、刪除、修改等維護任務的速度。
  • 索引的最左匹配原則指的是什麼?
  • Hash索引和B+樹索引有什麼區別?主流的使用哪個比較多?InnoDB存儲都支持嗎?
  • 彙集索引和非彙集索引有什麼區別?
  • ........

1.1聊聊索引的基礎知識

首先Mysql的基本存儲結構是(記錄都存在頁裏邊):索引

  • 各個數據頁能夠組成一個雙向鏈表
  • 每一個數據頁中的記錄又能夠組成一個單向鏈表基礎

    • 每一個數據頁都會爲存儲在它裏邊兒的記錄生成一個頁目錄,在經過主鍵查找某條記錄的時候能夠在頁目錄中使用二分法快速定位到對應的槽,而後再遍歷該槽對應分組中的記錄便可快速找到指定的記錄
    • 其餘列(非主鍵)做爲搜索條件:只能從最小記錄開始依次遍歷單鏈表中的每條記錄

因此說,若是咱們寫select * from user where username = 'Java3y'這樣沒有進行任何優化的sql語句,默認會這樣作:select

相關文章
相關標籤/搜索