1. 程式人生 > >關於Mysql底層索引

關於Mysql底層索引

什麼是索引? 索引就是一個DB提高效率查詢

為什麼要使用索引? 第一, 通過建立唯一索引,可以確定資料的唯一性 第二, 所以可以大大的加快檢索的速度,

索引的分類? 主要分為四大類: a).單列索引: 普通索引:就是為了查詢更加快點 唯一索引:列中的值都是唯一的,但是可以為null 主鍵索引:列不能為null,比如說主鍵索引 b).組合索引:在表中多個列上建立的索引,只有查詢條件使用了最左邊的欄位時,索引才能被使用。比如說有id,name,age三個列,如果使用的是name或者age ,name 這個索引就不會被使用。 c).全文索引:只有在MySIAM引擎上才能夠發揮作用,只有欄位的型別是CHAR,VARCHAR,TEXT的時候才會被使用。 (全文索引就相當於模糊查詢) d).空間索引:空間索引是對空間資料型別的欄位建立的索引,MySQL中的空間資料型別有四種,GEOMETRY、POINT、LINESTRING、POLYGON。

索引的優缺點? 好處: a).通過建立唯一索引,可以保證資料庫每一行資料的唯一性。 b).可以大大的加快檢索的速度 c).在使用分組和排序的時候,能大大的減少查詢時間

不利的因素: a).建立和維護索引比較消耗時間,索引會根據表空間的增加而增加 b).索引佔物理空間,資料量越大,空間所佔的物理空間就越大 c).當對錶的進行增,刪,改的時候,索引也要動態的維護,這樣就降低了維護的速度。

建立索引需要注意的情況: a).在經常搜尋的列上建立索引 b).主鍵上建立唯一索引,不僅可以加快速度查詢,而且可以確保資料唯一性 c).對錶中資料很少的不要建立索引 d).對於一些數值比較少的不需要建立索引,比如說text,image …

Mysql底層最常用的索引? 1.MySIAM(Mysql預設的引擎) 2.InnoDB 3.Memory 4.CSV 5.Archive 6.Blakhole 7.Mrg_Mysiam

Mysql底層常用索引之間的區別以及聯絡? a).MYSIAM 是Mysql預設的引擎,它不支援事務,也不支援行級鎖和外來鍵(就是當執行Insert和Update的時候會將整個表鎖定,所以導致效率變低)。MYSIAM在查詢count的時候,他會有一個專門儲存的地方,他平常一般都是CURD的時候,讀的比較多。

b).InnoDB是對資料庫ACID提供了支援,並且對行級鎖和外來鍵支援。他們的設計目標就是處理大容量的資料,InnoDB不支援全文的檢索,啟動比較慢,它不會儲存行數。所以,查詢count的時候,需要全表掃描,效率比較慢。如果需要使用事務的時候,該引擎是首選。

由於鎖的力度非常小,所以在寫表操作的時候,不會鎖表,所以對併發度較高的場景下效率還是很高的。

兩種引擎的差別以及什麼時候使用?

	a).大資料的時候還是建議InnoDB引擎,他支援事務的處理,InnoDB也能夠利用日誌回覆資料,還有就是主鍵的查詢InnoDB非常快的。大批量的插入操作MYISAM執行的效率高點,InnoDB在Update的時候效率要比MySIAM效率高點。


	b)MySIAM引擎:
		在Mysql的生成目錄會有MYI,MYD,frm檔案。他是這樣根據索引查資料的。結構中儲存的內容實際上是地址值,這種索引稱為非聚集索引



	c).InnoDB引擎:
		在mysql生成目錄只有frm,idb檔案,他是這樣查詢資料的,他的資料結構中儲存的都是實際的資料,所以被稱為聚集索引。