資源描述:
《mysql order by索引優(yōu)化--》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫(kù)。
1、MySQLOrderBy索引優(yōu)化>> 在一些情況下,MySQL可以直接使用索引來(lái)滿足一個(gè)ORDERBY或GROUPBY子句而無(wú)需做額外的排序。盡管ORDERBY不是和索引的順序準(zhǔn)確匹配,索引還是可以被用到,只要不用的索引部分和所有的額外的ORDERBY字段在ySQLOrderBy 下列的幾個(gè)查詢都會(huì)使用索引來(lái)解決ORDERBY或GROUPBY部分:SELECT*FROMt1ORDERBYkey_part1,key_part2,...;SELECT*FROMt1t1t1ORDERBYkey_part
2、1DESC,key_part2DESC;SELECT*FROMt1ySQLOrderBy 在另一些情況下,MySQL無(wú)法使用索引來(lái)滿足ORDERBY,盡管它會(huì)使用索引來(lái)找到記錄來(lái)匹配t1ORDERBYkey1,key2; *在非連續(xù)的索引鍵部分上做ORDERBY:SELECT*FROMt1t1ORDERBYkey_part1DESC,key_part2ASC;*用于搜索記錄的索引鍵和做ORDERBY的不是同一個(gè):SELECT*FROMt1ySQL是否在查詢中使用了索引。如果Extra字段的值是Us
3、ingfilesort,則說(shuō)明MySQL無(wú)法使用索引。詳情請(qǐng)看7.2.1EXPLAINSyntax(GetInformationAboutaSELECT)。當(dāng)必須對(duì)結(jié)果進(jìn)行排序時(shí),MySQL4.1以前它使用了以下filesort算法: 1.根據(jù)索引鍵讀取記錄,或者掃描數(shù)據(jù)表。那些無(wú)法匹配ERGEBUFF(7)個(gè)區(qū)域的塊保存在另一個(gè)臨時(shí)文件中。重復(fù)這個(gè)操作,直到所有在第一個(gè)文件的塊都放到第二個(gè)文件了。 6.重復(fù)以上操作,直到剩余的塊數(shù)量小于MERGEBUFF2(15)。 7.在最后一次多重合并時(shí),
4、只有記錄的指針(排序索引鍵的最后部分)寫到結(jié)果文件中去。 8.通過(guò)讀取結(jié)果文件中的記錄指針來(lái)按序讀取記錄。想要優(yōu)化這個(gè)操作,MySQL將記錄指針讀取放到一個(gè)大的塊里,并且使用它來(lái)按序讀取記錄,將記錄放到緩沖中。緩沖的大小由系統(tǒng)變量read_rnd_buffer_size的值而定。這個(gè)步驟的代碼在源文件`sql/records.cc'中。 這個(gè)逼近算法的一個(gè)問(wèn)題是,數(shù)據(jù)庫(kù)讀取了2次記錄:一次是估算ySQL4.1及更新版本中,filesort優(yōu)化算法用于記錄中不只包括索引鍵值和記錄的位置,還包
5、括查詢中要求的字段。這么做避免了需要2次讀取記錄。改進(jìn)的filesort算法做法大致如下: 1.跟以前一樣,讀取匹配ySQL能否使用索引而非額外的排序過(guò)程。如果不能使用索引,可以試著遵循以下策略: *增加sort_buffer_size的值?! ?增加read_rnd_buffer_s12下一頁(yè)>>>>這篇文章來(lái)自..,。ize的值?! ?修改tmpdir,讓它指向一個(gè)有很多剩余空間的專用文件系統(tǒng)?! ∪绻褂肕ySQL4.1或更新,這個(gè)選項(xiàng)允許有多個(gè)路徑用循環(huán)的格式。各個(gè)路徑之間在Unix上用冒
6、號(hào)(':')分隔開(kāi)來(lái),在Windows,NetWare以及OS/2上用分號(hào)(';')??梢岳眠@個(gè)特性將負(fù)載平均分?jǐn)偨o幾個(gè)目錄。注意:這些路徑必須是分布在不同物理磁盤上的目錄,而非在同一個(gè)物理磁盤上的不同目錄。上一頁(yè)12>>>>這篇文章來(lái)自..,。