MySql索引概述

2022-07-07 04:06:11 字數 2222 閱讀 9374

mysql基本架構:

為什麼mysql使用b+樹

為什麼不使用hash表

hash表既然不合適,就考慮用樹,用什麼樹?

二叉樹不能考慮,所以考慮多叉樹

b樹就是多叉樹:

都知道每個磁碟大小是4k,如果正常查資料的話,這種資料介面3次就可以查到了,也就是用了12k,但是b樹不好的是非節點上也存data資料,如果查詢的時候可能一次就查到了資料直接就返回,本質上是沒錯。但是如果data的資料存的是個大的資料,就占用了很多的資料空間,這樣還是會影響樹的深度,所以考慮把data另外單獨存,就出現了b+樹。

b+樹(innodb):

b+樹就是只有葉子節點才可以存放data,同樣是查詢三次絕對就可以查到資料,並且這樣不會占用資料儲存空間,存的多的多,效率也可以。 

myisam 的b+樹:

myisam的b+樹和innodb的不同時,myisam存的資料和索引是分開的,所以它是先從b+樹查詢,查到對應的乙個位址的值,再去查詢對應的資料

索引的分類

主鍵是一種唯一性索引,但是必須指定主鍵。

就是根據主鍵建立的索引,就算自己不設定主鍵索引,它會自己建立主鍵索引,(rowid),這個rowid是我們不可見的,但是存在。

工作中我們有時會有多對多的關係,就會有多個列作為索引,這個叫聯合主鍵。

在建表時候如果指定列是唯一的,此時建立索引自動就是唯一索引了。

現在有個表,欄位有id和name,如果用select * from where name = '' 想去查id,會有回表步驟,先去查id,又去id的b+樹去查,走了兩次索引。

如果用select id from where name = '' 去查id,直接就把id給返回回來了,不會再走第二次索引。

因為innodb 方式資料和索引是在一起的,所以可以直接把資料返回,一般回表說的是innodb,myisam 存的是位址,所以一般不存在回表。不懂b+樹結構的先去補一補。。。

索引下推

就是在回表時候,進行乙個判斷,如果條件滿足,就不會執行回表後的索引操作,直接就返回了,達到效率提高的目的。

組合索引(最左匹配原則)

在建表時候,考慮字段順序,比如name 和age,哪個在前,根據實際查詢情況判斷,

如果name排在age面前的字段,想要查age,就必須經過name,所以如果單獨要查age的話,就要單獨再建立乙個age索引。這樣會有多種情況,比如name和age兩個字段的話:

情況1和情況2的索引上,age+name 和 name+age 索引空間大小是一樣的,但是name 比 age 索引空間肯定大,所以情況2這種索引更好。

mysql儲存引擎

鎖的機制:粒度越細,效率越高。

MySQL索引概述

1.什麼是索引?索引的英語單詞是 index 索引相當於一本字典的目錄,索引額作用是提高程式的檢索效率 查詢效率 2.主鍵自動新增索引,所以能夠通過主鍵查詢盡量通過主鍵查詢,效率較高 3.索引和表相同,索引是乙個物件,表儲存在硬碟檔案中的,索引也是儲存在硬碟檔案中的 4.在mysql資料庫管理系統中...

GeoMesa 索引概述

geomesa使用許多不同的索引來滿足各種搜尋謂詞。每個索引都有乙個識別符號,用於在配置選項中引用它。geomesa將為給定的 featuretype模式建立各種索引。這允許我們以優化的方式回答各種查詢。geomesa將盡最大努力確定用於索引的屬性。要使用的屬性也可以指定為 featuretype。...

索引的概述

索引用來快速地尋找那些具有特定值的記錄,所有mysql索引都以b 樹的形式儲存。如果沒有索引,執行查詢時mysql必須從第乙個記錄開始掃瞄整個表的所有記錄,直至找到符合要求的記錄。表裡面的記錄數量越多,這個操作的代價就越高。如果作為搜尋條件的列上已經建立了索引,mysql無需掃瞄任何記錄即可迅速得到...