MYSQL-------索引

1、索引是什麼

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

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

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

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

2、優勢

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

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

3、劣勢

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

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

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

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

4、索引的分類

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

              1.普通索引:MySQL中基本索引類型,沒有什麼限制,允許在定義索引的列中插入重複值和空值,純粹爲了查詢數據更快一點。

              2.唯一索引:索引列中的值必須是唯一的,但是允許爲空值。

              3.主鍵索引:是一種特殊的唯一索引,不允許有空值。

  組合索引

    在表中的多個字段組合上創建的索引,只有在查詢條件中使用了這些字段的左邊字段時,索引纔會被使用,使用組合索引時遵循最左前綴集合。

  複合索引

    即一個索引包含多個列。

        全文索引

                 全文索引,只有在MyISAM引擎上才能使用,只能在CHAR,VARCHAR,TEXT類型字段上使用全文索引,介紹了要求,說說什麼是全文索引,就是在一堆文字中,通過其中的某個關鍵字等,就能找到該字段所屬的記錄行,比如有"你是個大煞筆,二貨 ..." 通過大煞筆,可能就可以找到該條記錄。

       空間索引

              空間索引是對空間數據類型的字段建立的索引,MySQL中的空間數據類型有四種,GEOMETRY、POINT、LINESTRING、POLYGON。

      在創建空間索引時,使用SPATIAL關鍵字。

      要求,引擎爲MyISAM,創建空間索引的列,必須將其聲明爲NOT NULL。

5、基本語法

  

    

6、MySQL索引結構

    BTree索引

    Hash索引

    full-text全文索引

    R-Tree索引

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

    ①主鍵自動建立唯一索引

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

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

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

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

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

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

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

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

  ①表記錄太少

  ②經常增刪改的表

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

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

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

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

 

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