mysql索引的建立對於mysql的高效執行是很重要的,索引可以大大提高mysql的檢索速度。
打個比方,如果合理的設計且使用索引的mysql是一輛蘭博基尼的話,那麼沒有設計和使用索引的mysql就是乙個人力三輪車。
索引分單列索引和組合索引。單列索引,即乙個索引只包含單個列,乙個表可以有多個單列索引,但這不是組合索引。組合索引,即乙個索引包含多個列。
建立索引時,你需要確保該索引是應用在 sql 查詢語句的條件(一般作為 where 子句的條件)。
實際上,索引也是一張表,該錶儲存了主鍵與索引字段,並指向實體表的記錄。
上面都在說使用索引的好處,但過多的使用索引將會造成濫用。因此索引也會有它的缺點:雖然索引大大提高了查詢速度,同時卻會降低更新表的速度,如對表進行insert、update和delete。因為更新表時,mysql不僅要儲存資料,還要儲存一下索引檔案。
建立索引會占用磁碟空間的索引檔案。
mysql目前主要有以下幾種索引型別:fulltext,hash,btree,rtree。
1. fulltext
即為全文索引,目前只有myisam引擎支援。其可以在create table ,alter table ,create index 使用,不過目前只有 char、varchar ,text 列上可以建立全文索引。
全文索引並不是和myisam一起誕生的,它的出現是為了解決where name like 「%word%"這類針對文字的模糊查詢效率較低的問題。
2. hash
由於hash的唯一(幾乎100%的唯一)及類似鍵值對的形式,很適合作為索引。
hash索引可以一次定位,不需要像樹形索引那樣逐層查詢,因此具有極高的效率。但是,這種高效是有條件的,即只在「=」和「in」條件下高效,對於範圍查詢、排序及組合索引仍然效率不高。
3. btree
btree索引就是一種將索引值按一定的演算法,存入乙個樹形的資料結構中(二叉樹),每次查詢都是從樹的入口root開始,依次遍歷node,獲取leaf。這是mysql裡預設和最常用的索引型別。
4. rtree
rtree在mysql很少使用,僅支援geometry資料型別,支援該型別的儲存引擎只有myisam、bdb、innodb、ndb、archive幾種。
相對於btree,rtree的優勢在於範圍查詢。
ps. 此段詳細內容見此片博文:mysql幾種索引型別的區別及適用情況
ps:索引合併,使用多個單列索引組合搜尋;
覆蓋索引,select的資料列只用從索引中就能夠取得,不必讀取資料行,換句話說查詢列要被所建的索引覆蓋。
聚集(clustered)索引:也叫聚簇索引,是指資料行的物理順序與列值(一般是主鍵的那一列)的邏輯順序相同,乙個表中只能擁有乙個聚集索引。mysql中一般預設主鍵為聚集索引。
非聚集(unclustered)索引:該索引中索引的邏輯順序與磁碟上行的物理儲存順序不同,乙個表中可以擁有多個非聚集索引。其實按照定義,除了聚集索引以外的索引都是非聚集索引,只是人們想細分一下非聚集索引,分成普通索引,唯一索引,全文索引。
什麼是索引?
mysql 資料庫舉例吧 一 什麼是索引?索引用來快速地尋找那些具有特定值的記錄,所有mysql索引都以b 樹的形式儲存。如果沒有索引,執行查詢時mysql必須從第乙個記錄開始掃瞄整個表的所有記錄,直至找到符合要求的記錄。表裡面的記錄數量越多,這個操作的代價就越高。如果作為搜尋條件的列上已經建立了索...
什麼是索引
索引的作用相當於圖書的目錄,可以根據目錄中的頁碼快速找到所需的內容。資料庫使用索引以找到特定值,然後順指標找到包含該值的行。在表中建立索引,然後在索引中找到符合查詢條件的索引值,最後通過儲存在索引中的rowid 相當於頁碼 快速找到表中對應的記錄。索引的建立是表中比較有指向性的字段,相當於目錄,比如...
什麼是索引
索引是幫助mysql高效獲取資料的排好序的資料結構 本質是一種優化查詢的資料結構 索引儲存在檔案裡 索引結構 索引底層的資料結構 二叉樹紅黑樹 hash b 樹存在表test,表的字段分別為 col 1和col 2,為該錶的col 2 字段新增索引。為了方便理解,假設索引底層用的資料結構是二叉搜尋樹...