![第二章sql性能優(yōu)化篇18講25hash索引底層原理_第1頁](http://file4.renrendoc.com/view/6cf0dc4ffb6f4969dc1b925a6b68130b/6cf0dc4ffb6f4969dc1b925a6b68130b1.gif)
![第二章sql性能優(yōu)化篇18講25hash索引底層原理_第2頁](http://file4.renrendoc.com/view/6cf0dc4ffb6f4969dc1b925a6b68130b/6cf0dc4ffb6f4969dc1b925a6b68130b2.gif)
![第二章sql性能優(yōu)化篇18講25hash索引底層原理_第3頁](http://file4.renrendoc.com/view/6cf0dc4ffb6f4969dc1b925a6b68130b/6cf0dc4ffb6f4969dc1b925a6b68130b3.gif)
![第二章sql性能優(yōu)化篇18講25hash索引底層原理_第4頁](http://file4.renrendoc.com/view/6cf0dc4ffb6f4969dc1b925a6b68130b/6cf0dc4ffb6f4969dc1b925a6b68130b4.gif)
![第二章sql性能優(yōu)化篇18講25hash索引底層原理_第5頁](http://file4.renrendoc.com/view/6cf0dc4ffb6f4969dc1b925a6b68130b/6cf0dc4ffb6f4969dc1b925a6b68130b5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
2019-08-07SQL必知必 進(jìn)入課06:49我們上節(jié)課講解了B+樹的原理,今天我們來學(xué)習(xí)下Hash的原理和使用。Hash本身是一個函數(shù),又被稱為散列函數(shù),它可以幫助我們大幅提升檢索數(shù)據(jù)的效率。打個比方,ash就好像一個智能前臺,你只要告訴它想要查找的人的姓名,它就會告訴你那個人坐在哪個位置,只需要一次交互就可以完成查找,效率非常高。大名鼎鼎的MD5就是Hash函數(shù)的一種。Hash算法是通過某種確定性的算法(比如MD5、SHA1、SHA2、SHA3)將輸入轉(zhuǎn)變?yōu)橹恍枰寣Ψ桨袶ash函數(shù)計(jì)算得到的結(jié)果告訴你即可,然后在本地同樣對文件進(jìn)行Hash函數(shù)的運(yùn)算,最后通過比較這兩個Hash函數(shù)的結(jié)果是否相同,就可以知道這兩個文件是否Hash動手寫程序統(tǒng)計(jì)一下Hash了解MySQL中的HashHash索引和BHash我們知道Python的數(shù)據(jù)結(jié)構(gòu)中有數(shù)組和字典兩種,其中數(shù)組檢索數(shù)據(jù)類似于全表掃描,需要對整個數(shù)組的內(nèi)容進(jìn)行檢索;而字典是由Hash表實(shí)現(xiàn)的,存儲的是key-value值,對于Hash11000010000復(fù)制代碼import#result=foriin#foriintemp=print('檢索時間',time_end-檢索時間為1.2436728477478027秒2HashPython10000素,然后檢索這10000個數(shù)據(jù),最后再統(tǒng)計(jì)一下時間。代碼如下:復(fù)制代碼import#result=foriinresult[i]=#foriintemp=檢索時間為0.0019941329956054688你能看到Hash方式檢索差不多用了2毫秒的時間,檢索效率提升得非常明顯。這是因?yàn)镠ash只需要一步就可以找到對應(yīng)的取值,算法復(fù)雜度為O(1),而數(shù)組檢索數(shù)據(jù)的算法復(fù)雜度為O(n)。MySQLHash采用Hash進(jìn)行檢索效率非常高,基本上一次檢索就可以找到數(shù)據(jù),而B+樹需要自頂向下依次查找,多次訪問節(jié)點(diǎn)才能找到數(shù)據(jù),中間需要多次I/O操作,從效率來說Hash比B+我們來看下Hash鍵值key通過Hash映射找到桶bucket。在這里桶(bucket)指的是一個能存儲一條或一行,形成鏈表結(jié)構(gòu),當(dāng)遇到Hash沖突時,會在桶中進(jìn)行鍵值的查找。那么什么是HashHash4HashHash1632MD53232MD5我們模擬一下Hash索引。關(guān)鍵字如下所示,每個字母的內(nèi)部編碼為字母的序號,比如01,Y258-11(從前向后)HashHashB我們之前講到過B+樹索引的結(jié)構(gòu),Hash索引結(jié)構(gòu)和B+樹的不同,因此在索引使用上也Hash索引不能進(jìn)行范圍查詢,而B+樹可以。這是因?yàn)镠ash索引指向的數(shù)據(jù)是無序的,而B+樹的葉子節(jié)點(diǎn)是個有序的鏈表。Hash索引不支持聯(lián)合索引的最左側(cè)原則(即聯(lián)合索引的部分索引無法使用),而B+樹可以。對于聯(lián)合索引來說,Hash索引在計(jì)算Hash值的時候是將索引鍵合并后再一起計(jì)算Hash值,所以不會針對每個索引單獨(dú)計(jì)算Hash值。因此如果用到聯(lián)合索引的一Hash索引不支持ORDERBY排序,因?yàn)镠ash索引指向的數(shù)據(jù)是無序的,因此無法起到排序優(yōu)化的作用,而B+樹索引數(shù)據(jù)是有序的,可以起到對該字段ORDERBY排序優(yōu)化的作用。同理,我們也無法用Hash索引進(jìn)行模糊查詢,而B+樹使用LIKE進(jìn)行模糊查詢的時候,LIKE后面前模糊查詢(比如%開頭)的話就可以起到優(yōu)化作用。對于等值查詢來說,通常Hash索引的效率更高,不過也存在一種情況,就是索引列的重復(fù)值如果很多,效率就會降低。這是因?yàn)橛龅紿ash沖突時,需要遍歷桶中的行指針來進(jìn)行比較,找到查詢的關(guān)鍵字,非常耗時。所以,Hash索引通常不會用到重復(fù)值多的列上,比如列庫中BHash型(Key-Value)數(shù)據(jù)庫中,Redis存儲的核心就是Hash另外MySQL中的Memory存儲引擎支持Hash存儲,如果我們需要用到查詢的臨時表時,就可以選擇Memory存儲引擎,把某個字段設(shè)置為Hash索引,比如字符串類型的字Hash等值查詢的時候,采用Hash索引是個不錯的選擇。另外MySQL的InnoDB存儲引擎還有個“自適應(yīng)Hash索引”的功能,就是當(dāng)某個索引BHashB也具備了Hash索引的優(yōu)點(diǎn)。今天的內(nèi)容到這里就結(jié)束了,我留兩道思考題吧。查找某個固定值時Hash索引比B+樹更快,為什么MySQL還要采用B+樹的存儲索引呢?另外,當(dāng)兩個關(guān)鍵字的Hash值相同時?上一 下一 21HashBMySQLB呢?另外,當(dāng)兩個關(guān)鍵字的Hash值相同時會發(fā)生什么?11老師,BLIKElikexxmysql查詢中存在著很多范圍查詢、orderby的場景,在這些場景下,B+樹的性能好于Ha能不能請老師分別推薦一下學(xué)習(xí)MySQL,Oracle,sqlServer作者回復(fù):可以看下關(guān)于MySQL高性能優(yōu)化的書籍,如果是數(shù)據(jù)庫初學(xué)者也可以先從SQLServer開始,畢竟微軟的產(chǎn)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 環(huán)保型磁性材料在商業(yè)領(lǐng)域的應(yīng)用案例
- 現(xiàn)代企業(yè)的網(wǎng)絡(luò)信息安全管理架構(gòu)設(shè)計(jì)
- 構(gòu)建全面發(fā)展的職業(yè)技能進(jìn)階體系
- 生態(tài)教育在企業(yè)管理中的價值與實(shí)施
- 現(xiàn)代AI在藥店智能化服務(wù)中的實(shí)踐與探索
- 現(xiàn)代企業(yè)網(wǎng)絡(luò)安全應(yīng)急響應(yīng)能力建設(shè)
- 2025年度教室裝修后租賃合同集錦
- 現(xiàn)代辦公室環(huán)境中的職業(yè)技能培養(yǎng)
- 2025年度綠色環(huán)保裝修貸款合同規(guī)范
- 現(xiàn)代辦公環(huán)境中的物流管理技術(shù)應(yīng)用
- 青島版五四制四年級數(shù)學(xué)上冊豎式計(jì)算100道
- DB11T 1322.94-2024安全生產(chǎn)等級評定技術(shù)規(guī)范 第94部分:救助管理機(jī)構(gòu)
- 2024都市人群科學(xué)護(hù)肝白皮書-byhealthx庶正康訊x天貓-202409
- 2024至2030年中國天津市酒店行業(yè)市場發(fā)展現(xiàn)狀及投資方向研究報告
- 新教材-外研版高中英語選擇性必修第二冊全冊教學(xué)課件(按單元排序-)
- 甘肅省臨夏州2023-2024學(xué)年高二下學(xué)期期末質(zhì)量檢測語文試卷(無答案)
- 貨場煤泥合同模板
- 腸道健康管理課件
- 房產(chǎn)中介公司薪酬制度
- 家具生產(chǎn)車間規(guī)章制度
- 成人氧氣吸入療法護(hù)理標(biāo)準(zhǔn)解讀-2
評論
0/150
提交評論