MySQL基本解析

【一】索引

基本概述:索引是數據庫管理系統中一個有序數據結構,協助快速查詢更新數據庫表中的數據

索引類型:普通索引,唯一索引(唯一),主鍵索引(唯一非空),全文索引(解決like效率低的索引)

數據結構:二叉查找樹,查找效率受到其深度的影響,極端情況下會行程單鏈表的結構,查詢效率慢,之後演變成平衡二叉查找樹,通過左右旋的操作使得左右子樹的深度相差不大,平衡二叉樹每個節點如果只存儲一條數據大大浪費空間,所以最終變爲多路平衡查找樹,即所謂的B Tree,MySql底層的數據結構是加強版的B TREE即:B+Tree

B TREE結構圖

B+TREE結構圖

B+TREE一路能夠存儲多少條數據 

一個節點16k,大約1024*16個字節,引用+鍵值大約16個字節,所以一個節點可以分1024路,葉子節點存儲數據,一條數據約1k,可以存儲16條數據,所以一路存儲的數據共1024*1024*16=16777216,大約一千多萬條數據,節省了與磁盤的io操作,樹的深度也就在2-3之間

 b+tree的特點

1、b tree能解決的問題,b+tree都能解決

2、掃庫掃表能力更強

3、磁盤讀寫能力更強

4、排序能力更強

5、效率更加穩定:因爲數據都是存儲在葉子節點上,保證查詢數據,每次的io效率是穩定的

索引方式

1、B+TREE

2、Hash:採取鍵值對模式,時間複雜度永遠是0(1)查詢快,缺點是無序的,只能等值查詢,向> <這種範圍查詢是搞不定的 ;同時也會出現hash碰撞的問題

InnoDb主鍵索引,其他索引(輔助索引) :Innodb是以主鍵索來組織數據存放的

如果沒有定義主鍵索引的話,它會找一個不包含null值得唯一字段作爲主鍵索引

如果沒有這種字段,它會選擇隱含得rowid作爲主鍵索引

索引的適用原則

離散度越高建索引越好 

聯合索引的話滿足最左匹配原則

覆蓋索引,指查詢具體的字段索引數據,不需要再走主鍵索引,猶如上圖的輔助索引,只不過不需要再查詢一遍主鍵索引拉

1、在用於where判斷order排序和join的on字段上創建索引

2、索引的個數不要過多:索引創建過多消耗空間

3、區分度低的字段不要建立索引,比如性別

4、頻繁更新的值,不要作爲主鍵,因爲會發生數據結構的調整

5、聯合索引把離散度高的字段放在前面

6、創建了聯合索引之後,不需要再創建單列的索引

什麼時候用不到索引?

1、索引列上適用函數計算,replace,sum,count

2、字符串不加引號,出現隱式轉換 id字段是字符串類型,sql --》where id=1不走索引,where id ='2' 走索引

3、like條件前面帶%。 where name like 'wang%'走索引 where name like '%wang' 不走索引

4、負向查詢能用到索引嗎 <> != not in? where name <> 'wang'走索引

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章