這篇文章主要為大家展示了“MySQL算法的示例分析”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“MySQL算法的示例分析”這篇文章吧。
成都創(chuàng)新互聯(lián)公司是一家集成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、網(wǎng)站頁(yè)面設(shè)計(jì)、網(wǎng)站優(yōu)化SEO優(yōu)化為一體的專業(yè)網(wǎng)絡(luò)公司,已為成都等多地近百家企業(yè)提供網(wǎng)站建設(shè)服務(wù)。追求良好的瀏覽體驗(yàn),以探求精品塑造與理念升華,設(shè)計(jì)最適合用戶的網(wǎng)站頁(yè)面。 合作只是第一步,服務(wù)才是根本,我們始終堅(jiān)持講誠(chéng)信,負(fù)責(zé)任的原則,為您進(jìn)行細(xì)心、貼心、認(rèn)真的服務(wù),與眾多客戶在蓬勃發(fā)展的市場(chǎng)環(huán)境中,互促共生。MySQL算法簡(jiǎn)析
在MySQL 中,只有一種Join 算法,就是大名鼎鼎的Nested Loop Join,他沒(méi)有其他很多所提供的Hash Join,也沒(méi)有Sort Merge Join。顧名思義,Nested Loop Join 實(shí)際上就是通過(guò)驅(qū)動(dòng)表的結(jié)果集作為循環(huán)基礎(chǔ)數(shù)據(jù),然后一條一條的通過(guò)該結(jié)果集中的數(shù)據(jù)作為過(guò)濾條件到下一個(gè)表中查詢數(shù)據(jù),然后合并結(jié)果。如果還有第三個(gè)參與Join,則再通過(guò)前兩個(gè)表的Join 結(jié)果集作為循環(huán)基礎(chǔ)數(shù)據(jù),再一次通過(guò)循環(huán)查詢條件到第三個(gè)表中查詢數(shù)據(jù),如此往復(fù)。
MySQL 目前可以通過(guò)兩種算法來(lái)實(shí)現(xiàn)數(shù)據(jù)的排序操作。
1. 取出滿足過(guò)濾條件的用于排序條件的字段以及可以直接定位到行數(shù)據(jù)的行指針信息,在SortBuffer 中進(jìn)行實(shí)際的排序操作,然后利用排好序之后的數(shù)據(jù)根據(jù)行指針信息返回表中取得客戶端請(qǐng)求的其他字段的數(shù)據(jù),再返回給客戶端;
2. 根據(jù)過(guò)濾條件一次取出排序字段以及客戶端請(qǐng)求的所有其他字段的數(shù)據(jù),并將不需要排序的字段存放在一塊內(nèi)存區(qū)域中,然后在Sort Buffer 中將排序字段和行指針信息進(jìn)行排序,最后再利用排序后的行指針與存放在內(nèi)存區(qū)域中和其他字段一起的行指針信息進(jìn)行匹配合并結(jié)果集,再按照順序返回給客戶端。
加大max_length_for_sort_data 參數(shù)的設(shè)置;
在MySQL 中,決定使用第一種老式的排序算法還是新的改進(jìn)算法的依據(jù)是通過(guò)參數(shù)max_length_for_sort_data 來(lái)決定的。當(dāng)我們所有返回字段的較大長(zhǎng)度小于這個(gè)參數(shù)值的時(shí)候,MySQL 就會(huì)選擇改進(jìn)后的排序算法,反之,則選擇老式的算法。所以,如果我們有充足的內(nèi)存讓MySQL 存放需要返回的非排序字段的時(shí)候,可以加大這個(gè)參數(shù)的值來(lái)讓MySQL 選擇使用改進(jìn)版的排序算法。
以上是“MySQL算法的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!