電腦有必要打開索引功能嗎 數(shù)據(jù)庫中的索引,原理是什么?為什么查詢使用索引就會(huì)快?
數(shù)據(jù)庫中的索引,原理是什么?為什么查詢使用索引就會(huì)快?也許很多程序員朋友對數(shù)據(jù)的索引根本不并不陌生,最常見的索引是BTree索引,索引這個(gè)可以減慢數(shù)據(jù)庫的檢索速度,只不過會(huì)會(huì)降低新增、修改、刪除掉操作
數(shù)據(jù)庫中的索引,原理是什么?為什么查詢使用索引就會(huì)快?
也許很多程序員朋友對數(shù)據(jù)的索引根本不并不陌生,最常見的索引是BTree索引,索引這個(gè)可以減慢數(shù)據(jù)庫的檢索速度,只不過會(huì)會(huì)降低新增、修改、刪除掉操作的速度,一些出現(xiàn)錯(cuò)誤的寫造成索引失去效果等等。
但是要是被問到,我想知道為什么用索引之后,網(wǎng)站查詢都會(huì)變快?BTree索引的原理是什么?這時(shí)候很多人肯定就到底了,今天我就以MySQL的InnoDB引擎為例,一講BTree索引的原理。
索引的基礎(chǔ)知識(shí)MySQL的基本存儲(chǔ)結(jié)構(gòu)是頁,差不多就是這個(gè)樣子的:
在這里,我們要知道一點(diǎn)100元以內(nèi)幾點(diǎn)(非常重要):
當(dāng)我們用MySQL的InnoDB引擎創(chuàng)建表,有且只能有一個(gè)主鍵;要是我們就沒不顯示地指定之間,那你MySQL會(huì)自動(dòng)提取一個(gè)流露字段才是主鍵;
聚集索引:以主鍵修改的索引;聚集索引的葉子節(jié)點(diǎn)儲(chǔ)存的是表中的數(shù)據(jù);
非能聚集索引:非主鍵修改的索引;非涌去索引在葉子節(jié)點(diǎn)儲(chǔ)存的是主鍵和索引列;建議使用非聚集索引網(wǎng)上查詢數(shù)據(jù),會(huì)查詢到葉子上的主鍵,再參照主鍵查到數(shù)據(jù)(這個(gè)過程叫做什么回表)。
頁和頁之間、頁和數(shù)據(jù)之間的關(guān)系我們以涌去索引做講解時(shí),頁和頁之間、這些頁和數(shù)據(jù)之間的關(guān)系是這樣的:
數(shù)據(jù)頁和數(shù)據(jù)頁之間,橫列一個(gè)雙向鏈表;
每個(gè)數(shù)據(jù)頁中的記錄,是一個(gè)分流鏈表;
每個(gè)數(shù)據(jù)頁都參照內(nèi)部的記錄生成一個(gè)頁目錄(Pagedirectory),假如是主鍵的話,可以在頁目錄中可以使用二分法急速定位;
如果沒有我們依據(jù)一個(gè)非主鍵、非索引列并且查詢,那你是需要循環(huán)遍歷頓井站鏈表,不能找到處的頁;再循環(huán)遍歷頁內(nèi)的單邊鏈表;如果不是表內(nèi)數(shù)據(jù)太大的話,這樣的查詢都會(huì)很慢。
BTree索引的原理先讓我們看一下BTree索引差不多是什么樣子(以圍聚/主鍵索引為例):
要是這時(shí)候我們要網(wǎng)上查詢id16的數(shù)據(jù):
網(wǎng)站查詢頁-1,找到頁-2存儲(chǔ)位置的是小于等于30的數(shù)據(jù);
可以查詢頁-2,找到頁-5存儲(chǔ)的是10~20的數(shù)據(jù);
可以查詢頁-5,找不到id16的數(shù)據(jù)。
很顯然,也沒用索引的時(shí)候,不需要遍歷過程上下行鏈表來定位不對應(yīng)的頁,而有了索引,則是可以一層層“目錄”定位到按的頁上。
為么BTree索引會(huì)減低新增、修改、刪掉的速度BTree是一顆平衡樹,假如對這顆樹再新增、修改、刪除掉的話,會(huì)徹底的破壞它的重新組合結(jié)構(gòu);
我們在做數(shù)據(jù)新增審批、修改、刪掉的時(shí)候,要花額外的時(shí)間去程序維護(hù)索引;
正畢竟這些額外的開銷,造成索引會(huì)降低新增、修改、刪出的速度。
思考題,歡迎下方留言再討論現(xiàn)在你是否需要理解了BTree索引的原理?
到最后再留一個(gè)思考題:為啥官方建議您可以使用自增長的速度主鍵充當(dāng)索引?大家可以不在留言中寫了你的答案。
我將緩慢彼此分享Java開發(fā)、架構(gòu)設(shè)計(jì)、程序員職業(yè)發(fā)展等方面的見解,我希望能得到你的關(guān)注;參與我后,可私信你的郵箱數(shù)字【1】,查看海量藏書學(xué)習(xí)資料。
電腦開機(jī)索引,什么都打不開?
一個(gè)是完全恢復(fù)G盤。一個(gè)是減小C盤空間,我建議你先最好不要過多后運(yùn)行系統(tǒng),先用PE盤進(jìn)入PE,用diskgenius軟件先去搜索丟失的分區(qū)。能重新恢復(fù)就先可以恢復(fù)分區(qū)表中的G分區(qū),這樣的話再用PE光盤驅(qū)動(dòng)的數(shù)據(jù)恢復(fù)軟件恢復(fù)就簡單點(diǎn)了。如果沒有搜索不到弄丟分區(qū),那就先在diskgenius軟件中記好F盤的終止柱面和H盤的起始柱面,然后再在數(shù)據(jù)恢復(fù)軟件中實(shí)際這兩個(gè)數(shù)據(jù)的區(qū)間進(jìn)行系統(tǒng)掃描完全恢復(fù)。
速度變大C盤空間的話用diskgenius也很更方便,C盤,右鍵,擴(kuò)大之類的