MySQL高級-索引

感謝:https://www.cnblogs.com/zhaobingqing/p/7066112.htmlhtml

一、索引是什麼算法

  索引(Index)是幫助MySQL高效獲取數據的數據結構。能夠獲得索引的本質:索引是數據結構。數據庫

  能夠理解爲「排好序的快速查找數據結構」數據結構

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

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

二、優點htm

  相似大學圖書館建書目索引,提升數據檢索效率,下降數據庫的IO成本。blog

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

三、劣勢索引

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

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

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

  都會調整由於更新所帶來的鍵值變化後的索引信息。 

四、索引的分類

  單值索引

    即一個索引只包含單個列,一個表能夠有多個單列索引。

  惟一索引

    索引列的值必須惟一,但容許有空值。

  複合索引

    即一個索引包含多個列。

五、基本語法

  

    

六、MySQL索引結構

    BTree索引

    Hash索引

    full-text全文索引

    R-Tree索引

七、哪些狀況須要建立索引

    ①主鍵自動創建惟一索引

    ②頻繁做爲查詢條件的字段應該建立索引

    ③查詢中與其餘表關聯的字段,外鍵關係創建索引

    ④頻繁更新的字段不適合創建索引,由於每次更新不僅僅是更新了記錄還會更新索引

    ⑤WHERE條件裏用不到的字段不建立索引

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

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

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

八、哪些狀況不要建立索引

  ①表記錄太少

  ②常常增刪改的表

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

    由於更新表時,MySQL不只要保存數據,還要保存一下索引文件。

    數據重複且分佈平均的表字段,所以應該只爲最常常查詢和最常常排序的數據創建索引。

  ③注意,若是某個數據列包含許多重複的內容,爲它創建索引就沒有太大的實際效果。

相關文章
相關標籤/搜索