索引的型別
普通索引:這是最基本的索引型別,沒唯一性之類的限制。
唯一性索引:和普通索引基本相同,但所有的索引列值保持唯一性。
主鍵:主鍵是一種唯一索引,但必須指定為」primary key」。
全文索引:mysql從3.23.23開始支援全文索引和全文檢索。在mysql中,全文索引的索引型別為fulltext。全文索引可以在varchar或者text型別的列上建立。
多列索引:多列索引可以視為包含通過連線索引列的值而建立的值的排序的陣列。一般來說,即使是限制最嚴格的單列索引,它的限制能力也遠遠低於多列索引。
大多數mysql索引(primary key、unique、index和fulltext)使用b樹中儲存。空間列型別的索引使用r-樹,memory表支援hash索引。
索引可以是單列索引,也可以是多列索引。對相關的列使用索引是提高select操作效能的最佳途徑之一。mysql可以為多個列建立索引。乙個索引可以包括15個列。對於某些列型別,可以索引列的左字首,列的順序非常重要。
最左字首
多列索引有乙個特點,即最左字首(leftmost prefixing)。假如有乙個多列索引為key(firstname lastname age),當搜尋條件是以下各種列的組合和順序時,
mysql將使用該多列索引:
firstname,lastname,age
firstname,lastname
firstname
也就是說,相當於還建立了key(firstname lastname)和key(firstname)。
合理的建立索引的建議:
建立索引時,你需要確保該索引是應用在 sql 查詢語句的條件(一般作為 where 子句的條件)。
(1) 越小的資料型別通常更好:越小的資料型別通常在磁碟、記憶體和cpu快取中都需要更少的空間,處理起來更快。
(2) 簡單的資料型別更好:整型資料比起字元,處理開銷更小,因為字串的比較更複雜。在mysql中,應該用內建的日期和時間資料型別,而不是用字串來儲存時間;以及用整型資料型別儲存ip位址。
(3) 盡量避免null:應該指定列為not null,除非你想儲存null。在mysql中,含有空值的列很難進行查詢優化,因為它們使得索引、索引的統計資訊以及比較運算更加複雜。你應該用0、乙個特殊的值或者乙個空串代替空值
實際上,索引也是一張表,該錶儲存了主鍵與索引字段,並指向實體表的記錄。
但過多的使用索引將會造成濫用。因此索引也會有它的缺點:雖然索引大大提高了查詢速度,同時卻會降低更新表的速度,如對表進行insert、update和delete。因為更新表時,mysql不僅要儲存資料,還要儲存一下索引檔案。
建立索引會占用磁碟空間的索引檔案。
mysql索引型別介紹 mysql索引型別介紹
索引型別介紹 主鍵索引 primary key 要求關鍵字不能重複,也不能為null,同時增加主鍵約束 主鍵索引定義時,不能命名 唯一索引 unique index 要求關鍵字不能重複,同時增加唯一約束 普通索引 index 對關鍵字沒有要求 全文索引 fulltext key 關鍵字的 不是所有欄...
mysql索引型別介紹 mysql索引型別介紹
b 樹是多路平衡查詢樹,相對於平衡二叉樹,對父結點的直接子結點個數,不再僅限於2,可以指定m 自定義 這樣可以在樹的深度不大量增加的前提下,儲存更多的結點。b 樹是通常在檔案系統中使用。特點 a 樹的每個結點最多有m 自定義 子結點 b 若根結點不是葉子結點,則至少有兩個子結點 c 除根結點外的所有...
MySQL索引 索引型別
在mysql有兩種索引型別 hash b 樹 hash索引原理比較簡單就是利用了乙個hash表 說b 樹之前先要了解b 樹的資料結構。不廢話,先上圖。對b 樹做一些解釋,參考上圖。b 樹的資料都在葉子節點上 非葉子節點上的這些都是範圍。舉例 最上面的根節點上的資料是5,28,65代表的是它的三個子樹...