最近用到mysql索引,趕緊了解了一下,最後做乙個小小的總結。
索引,就是按照索引排好序的資料結構,查詢資料的時候走索引比不走索引要快很多,因為不走索引意味著全表掃瞄,而且還可能會鎖住元組,效率比較低。
mysql使用b+ tree的索引模型,無論是myisam還是innodb。為什麼使用b+樹而不是紅黑樹、b樹?不使用二叉樹的原因主要是因為如果儲存大量資料,二叉樹很容易深度過深。而基於hash則無法支援範圍查詢。b+樹的資料全部儲存在葉子節點,按照索引排好序並且通過雙向指標串在一起,這樣就很容易的進行區間遍歷。
聯合索引:mysql將多個列按照順序作為乙個索引,b+樹按照索引的先後優先級別排序;建立的聯合索引a,b,c之後索引的使用遵循最左配備原則。
聚集索的葉子節點會儲存資料(其他列的資料),非聚集索引則儲存對應的磁碟指標。
葉子節點儲存的是主鍵的值,拿到主鍵的值之後還需要查詢一次才最終拿到資料,這個過程稱為回表。
輔助索引通過create index indecname on tablename(columnname) 新增。
myisam使用非聚簇索引,b+樹葉子節點的值儲存的是磁碟指標,需要進行一次磁碟io操作才能最終拿到資料,而innodb使用聚簇索引,到達葉子節點意味著直接拿到了資料。mysam鎖的粒度是表級,innodb支援行級鎖。mylsam不支援事務。
更新操作有一定的損耗,需要維護索引樹,而且占用磁碟空間。
mysql索引學習總結
優勢 劣勢 索引也是一張表,該錶儲存了主鍵與索引字段,並指向實體表的記錄,所以索引也是占用空間的 雖然提高了查詢速度,但是會降低更新表的速度,如果對錶進行insert update 和delete。因為更新表,不僅要儲存資料,還要儲存一下索引檔案每次更新新增了索引列的字段,都會調整更新帶來的兼職變化...
mysql 索引總結 mysql索引總結
mysql中每乙個表都有乙個聚簇索引clusted index,該所索引是預設建立的,除此之外的表上的每乙個非聚簇索引都是二級索引,又叫輔助索引 secondary indexes 以innodb來說,每個innodb表具有乙個特殊的索引稱為聚集索引,如果您的表上定義有主鍵,該主鍵索引是聚集索引,如...
mysql學習總結 索引 未完
部落格位址僅此而已。回憶一下當時的想法真的很可笑,老是喜歡搞一些表面的東西,實際上當時的部落格對自己的收穫微乎其微,純屬為了 寫而寫。現在呢,實習快半年了,實習期間做了很多事情,但是回想自己的收穫,的確有進步,是什麼說不出來。參加實習的這段時間 以來,每天在公司待到十點學習新的知識,從來不曾懈怠,可...