<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
索引的本質:
索引的作用:
資料結構上面的分類:
當我們搜尋13這條資料時,在根節點和子節點 都能定位,但是一直會找到葉子結點。
二元樹平衡二元樹,B樹對比:
如圖顯示如果是自增主鍵情況下:
二元樹顯然不適合做關係型資料庫索引(和全表掃描沒什麼區別)。
平衡二元樹呢,雖然解決了這種情況,但是同樣會導致這棵樹,又瘦又高,這同樣會造成上文所提到查詢IO次數過多以及IO利用率不高。
B樹呢,顯然已經解決了這兩個問題,所以下文來解釋,為什麼在這種情況下MySQL還用了B+樹,又做了那些增強。
B樹和B+樹比較:
B+樹在B樹上面的優化:
IO效率更高(B樹每個節點都會保留資料區,而B+樹則不會,假設我們查詢一條資料要遍歷三層,那麼顯然B+樹查詢中IO消耗更小)
範圍查詢效率更高(如圖,B+樹已經形成了一個天然連結串列形式,只需要根據最結尾的鏈式結構查詢)
基於索引的資料掃描效率更高。
索引型別可分為兩類:
主鍵索引相對來說效能是最好的,但是對於SQL優化,其實大多時候我們都在輔佐索引上面做一些改進和補充。
test_innodb
(採用InnoDB作為儲存引擎)test_myisam(採用MyISAM作為儲存引擎)下圖是兩張表磁碟落地的相關檔案,這兩個儲存引擎在B+樹磁碟落地式截然不同的。B+樹在MyISAM落地:
SELECT id,name from test_myisam where id =103
test_myisam
表中,id為主鍵索引,name也是一個索引,那麼在test_myisam.MYI中則會有兩個平級的B+樹,這也導致MyISAM引擎中主鍵索引和二級索引是沒有主次之分的,是平級關係。因為這種機制在MyISAM引擎中,有可能使用多個索引,在InnoDB中則不會出現這種情況。B+樹在InnoDB落地:
我們現在執行如下SQL語句,他會先去找輔助索引,然後找到輔助索引下101的主鍵,再去回表(二次掃描)根據主鍵索引查詢103這條資料將其返回。
SELECT id,name from test_myisam where name ='zhangsan'
這裡就有一個問題了,為什麼不像MyISAM在輔助索引下直接記錄磁碟地址,而是要多此一舉再去回表掃描主鍵索引,這個問題在下面相關面試題中回答,記一下這個問題是這裡來的。
這個就不說了,上文應該講清楚了。
這個可以總結一下,MyISAM落地資料儲存會有三個型別檔案 ,.frm檔案是表骨架檔案,.MYD(D=data)則儲存資料 ,.MYI (I=index)則儲存索引,MyISAM引擎中主鍵索引和二級索引平級關係,在MyISAM引擎中,有可能使用多個索引,InnoDB則相反,主鍵索引和二級索有嚴格的主次之分在InnoDB一條語句只能用一個索引要麼不用。
可以通過執行計劃來判斷 可以在sql語句前explain/ desc
set global optimizer_trace='enabled=on' 開啟執行計劃開關他將會把每一條查詢sql執行計劃記錄在information_schema 庫中OPTIMIZER_TRACE表中
自增列,資料插入時整個索引樹是隻有右邊在增加的,相對來說索引樹的變動更小。
和上一個問題原因一樣,當一個索引經常發生變化,那麼就意味這,這個縮印樹也要經常發生變化。4
這個原因是因為離散性,比如說,一張一百萬資料的表,其中一個欄位代表性別,0代表男1代表女,把這欄位加了索引,那麼在索引樹上,將會有大量的重複資料。而我們常見的索引建立一般都是驅動型的。其目的是,儘可能的刪減資料的查詢範圍,這個顯然是不匹配的。
聯合索引是一個包含了多個功效的索引,他只是一個索引而不是多個,
其次,單列索引是一種特殊的聯合索引
聯合索引的創立要遵循最左前置原則(最常用列>離散度>佔用空間小)
通過索引項資訊可直接返回所需要查詢的索引列,該索引被稱之為覆蓋索引,說白了就是不需要做回表操作,可以從二級索引中直接取到所需資料。
索引下推,簡單點來說就是,在sql執行過程中,面對where多條件過濾時,通過一個索引,完成資料搜尋和過濾條件其,特點能減少io操作。
首先這句話是對的,但是情況有三種:
- 就是在你手動顯式指定這一個欄位為主鍵時候,會以這一個欄位為聚集索引。
- 在沒有顯式指定主鍵時候有兩種情況:
- 他會尋找第一個UK(unique key)作為主鍵索引組織索引編排。
- 如果既沒有指定主鍵也沒有UK的情況下,此時會以rowId(在InnoDB表中每一個記錄都會有一個隱藏(6byte)的rowId)為聚集索引。
在InnoDB 中基於輔助索引查詢的內容,從輔助索引中無法直接獲取,需要基於主鍵索引的二次掃描的操作叫做回表操作。
這個原因其實很簡單,因為主鍵索引的資料結構是會經常發生變化的,如果在輔助索引資料區記錄磁碟地址,那麼假設我們有10個輔助索引,當我們主鍵索引結構發生變化後,還要一個個去通知輔助索引,且主鍵索引結構是經常發生變化的,增刪都有可能影響他的
資料結構。
到此這篇關於MySQL優化及索引解析的文章就介紹到這了,更多相關MySQL優化索引內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45