MySQL高級-索引


1、索引是什么

  索引(Index)是幫助MySQL高效獲取數據的數據結構。可以得到索引的本質:索引是數據結構。

  可以理解為“排好序的快速查找數據結構”

  在數據之外,數據庫系統還維護着滿足特定查找算法的數據結構,這些數據結構以某種方式引用(指向)數據,

  這樣就可以在這些數據結構上實現高級查找算法,這種數據結構就是索引。

2、優勢

  類似大學圖書館建書目索引,提高數據檢索效率,降低數據庫的IO成本。

  通過索引對數據進行排序,降低數據排序的成本,降低了CPU的消耗。

3、劣勢

  實際上索引也是一張表,該表保存了主鍵與索引字段,並指向實體表的記錄,所以索引列也是要占空間的。

  雖然索引大大提高了查詢速度,同時確會降低更新表的速度,如對表進行INSERT、UPDATE、DELETE。

  因為更新表時,MySQL不僅要保存數據,還要保存一下索引文件每次更新添加了索引列的字段。

  都會調整因為更新所帶來的鍵值變化后的索引信息。 

4、索引的分類

  單值索引

    即一個索引只包含單個列,一個表可以有多個單列索引。

  唯一索引

    索引列的值必須唯一,但允許有空值。

  復合索引

    即一個索引包含多個列。

5、基本語法

  

    

6、MySQL索引結構

    BTree索引

    Hash索引

    full-text全文索引

    R-Tree索引

7、哪些情況需要創建索引

    ①主鍵自動建立唯一索引

    ②頻繁作為查詢條件的字段應該創建索引

    ③查詢中與其他表關聯的字段,外鍵關系建立索引

    ④頻繁更新的字段不適合建立索引,因為每次更新不單單是更新了記錄還會更新索引

    ⑤WHERE條件里用不到的字段不創建索引

    ⑥單鍵/組合索引的選擇問題,who?(在高並發下傾向創建組合索引)

    ⑦查詢中排序的字段,排序的字段若通過索引去訪問將大大提高排序速度

    ⑧查詢中統計或者分組字段

8、哪些情況不要創建索引

  ①表記錄太少

  ②經常增刪改的表

    提高了查詢速度,同時卻會降低更新表的速度,如對表進行INSERT、UPDATE、和DELETE。

    因為更新表時,MySQL不僅要保存數據,還要保存一下索引文件。

    數據重復且分布平均的表字段,因此應該只為最經常查詢和最經常排序的數據建立索引。

  ③注意,如果某個數據列包含許多重復的內容,為它建立索引就沒有太大的實際效果。

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM