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無需掃瞄任何記錄即可迅速得到...