<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

        MySQLorderby性能優(yōu)化方法實例_MySQL

        來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-09 19:50:20
        文檔

        MySQLorderby性能優(yōu)化方法實例_MySQL

        MySQLorderby性能優(yōu)化方法實例_MySQL:前言 工作過程中,各種業(yè)務(wù)需求在訪問數(shù)據(jù)庫的時候要求有order by排序。有時候不必要的或者不合理的排序操作很可能導(dǎo)致數(shù)據(jù)庫系統(tǒng)崩潰。如何處理好order by排序呢?本文從原理以及優(yōu)化層面介紹 order by 。 一 MySQL中order by的原理 1 利用索引的
        推薦度:
        導(dǎo)讀MySQLorderby性能優(yōu)化方法實例_MySQL:前言 工作過程中,各種業(yè)務(wù)需求在訪問數(shù)據(jù)庫的時候要求有order by排序。有時候不必要的或者不合理的排序操作很可能導(dǎo)致數(shù)據(jù)庫系統(tǒng)崩潰。如何處理好order by排序呢?本文從原理以及優(yōu)化層面介紹 order by 。 一 MySQL中order by的原理 1 利用索引的

        前言

        工作過程中,各種業(yè)務(wù)需求在訪問數(shù)據(jù)庫的時候要求有order by排序。有時候不必要的或者不合理的排序操作很可能導(dǎo)致數(shù)據(jù)庫系統(tǒng)崩潰。如何處理好order by排序呢?本文從原理以及優(yōu)化層面介紹 order by 。

        一 MySQL中order by的原理

        1 利用索引的有序性獲取有序數(shù)據(jù)

        當(dāng)查詢語句的 order BY 條件和查詢的執(zhí)行計劃中所利用的 Index 的索引鍵(或前面幾個索引鍵)完全一致,且索引訪問方式為 rang,ref 或者 index 的時候,MySQL 可以利用索引順序而直接取得已經(jīng)排好序的數(shù)據(jù)。這種方式的 order BY 基本上可以說是最優(yōu)的排序方式了,因為 MySQL 不需要進(jìn)行實際的排序操作。需要注意的是使用索引排序也有很多限制。這個在后文中中解釋。

        2 利用內(nèi)存/磁盤文件排序獲取結(jié)果

        由于沒有可以利用的有序索引取得有序的數(shù)據(jù),MySQL需要通過相應(yīng)的排序算法,將取得的數(shù)據(jù)在sort_buffer_size系統(tǒng)變量所設(shè)置大小的排序區(qū)進(jìn)行排序,這個排序區(qū)是每個Thread 獨享的,所以說可能在同一時刻在 MySQL 中可能存在多個 sort buffer 內(nèi)存區(qū)域。
        在MySQL中filesort 的實現(xiàn)算法有兩種:

        1) 雙路排序:是首先根據(jù)相應(yīng)的條件取出相應(yīng)的排序字段和可以直接定位行數(shù)據(jù)的行指針信息,然后在sort buffer 中進(jìn)行排序。
        2) 單路排序:是一次性取出滿足條件行的所有字段,然后在sort buffer中進(jìn)行排序。

        在 MySQL4.1 版本之前只有第一種排序算法,第二種算法是從MySQL4.1開始的改進(jìn)算法,主要目的是為了減少第一次算法中需要兩次訪問表數(shù)據(jù)的IO操作,將兩次變成了一次,但相應(yīng)也會耗用更多的 sort buffer 空間。典型的以空間換時間的優(yōu)化方式。當(dāng)然,MySQL4.1開始的以后所有版本同時也支持第一種算法,MySQL主要通過比較系統(tǒng)參數(shù) max_length_for_sort_data的大小和Query語句所取出的字段類型大小總和來判定需要使用哪一種排序算法。如果max_length_for_sort_data更大,則使用第二種優(yōu)化后的算法,反之使用第一種算法。所以如果希望 order BY 操作的效率盡可能的高,需要注意max_length_for_sort_data參數(shù)的設(shè)置。

        二 優(yōu)化order by

        當(dāng)無法避免排序操作時,又該如何來優(yōu)化呢?很顯然,優(yōu)先選擇第一種using index 的排序方式,在第一種方式無法滿足的情況下,盡可能讓 MySQL 選擇使用第二種單路算法來進(jìn)行排序。這樣可以減少大量的隨機(jī)IO操作,很大幅度地提高排序工作的效率。

        1 加大 max_length_for_sort_data 參數(shù)的設(shè)置

        在 MySQL 中,決定使用老式排序算法還是改進(jìn)版排序算法是通過參數(shù) max_length_for_ sort_data 來決定的。當(dāng)所有返回字段的最大長度小于這個參數(shù)值時,MySQL 就會選擇改進(jìn)后的排序算法,反之,則選擇老式的算法。所以,如果有充足的內(nèi)存讓MySQL 存放須要返回的非排序字段,就可以加大這個參數(shù)的值來讓 MySQL 選擇使用改進(jìn)版的排序算法。

        2 去掉不必要的返回字段

        當(dāng)內(nèi)存不是很充裕時,不能簡單地通過強(qiáng)行加大上面的參數(shù)來強(qiáng)迫 MySQL 去使用改進(jìn)版的排序算法,否則可能會造成 MySQL 不得不將數(shù)據(jù)分成很多段,然后進(jìn)行排序,這樣可能會得不償失。此時就須要去掉不必要的返回字段,讓返回結(jié)果長度適應(yīng) max_length_for_sort_data 參數(shù)的限制。

        3 增大 sort_buffer_size 參數(shù)設(shè)置

        這個值如果過小的話,再加上你一次返回的條數(shù)過多,那么很可能就會分很多次進(jìn)行排序,然后最后將每次的排序結(jié)果再串聯(lián)起來,這樣就會更慢,增大 sort_buffer_size 并不是為了讓 MySQL選擇改進(jìn)版的排序算法,而是為了讓MySQL盡量減少在排序過程中對須要排序的數(shù)據(jù)進(jìn)行分段,因為分段會造成 MySQL 不得不使用臨時表來進(jìn)行交換排序。

        但是這個值不是越大越好:

        1 Sort_Buffer_Size 是一個connection級參數(shù),在每個connection第一次需要使用這個buffer的時候,一次性分配設(shè)置的內(nèi)存。
        2 Sort_Buffer_Size 并不是越大越好,由于是connection級的參數(shù),過大的設(shè)置+高并發(fā)可能會耗盡系統(tǒng)內(nèi)存資源。
        3 據(jù)說Sort_Buffer_Size 超過2M的時候,就會使用mmap() 而不是 malloc() 來進(jìn)行內(nèi)存分配,導(dǎo)致效率降低。

        聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        MySQLorderby性能優(yōu)化方法實例_MySQL

        MySQLorderby性能優(yōu)化方法實例_MySQL:前言 工作過程中,各種業(yè)務(wù)需求在訪問數(shù)據(jù)庫的時候要求有order by排序。有時候不必要的或者不合理的排序操作很可能導(dǎo)致數(shù)據(jù)庫系統(tǒng)崩潰。如何處理好order by排序呢?本文從原理以及優(yōu)化層面介紹 order by 。 一 MySQL中order by的原理 1 利用索引的
        推薦度:
        標(biāo)簽: 實例 mysql 優(yōu)化
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 三级黄色片免费看| 亚洲av第一网站久章草| 中文字幕无码免费久久9一区9| 四虎影视www四虎免费| 亚洲熟伦熟女专区hd高清| 久久国产免费福利永久| 777亚洲精品乱码久久久久久 | 亚洲6080yy久久无码产自国产| 性做久久久久久久免费看| 亚洲AV综合色区无码二区偷拍| 一二三四免费观看在线电影| 2020久久精品亚洲热综合一本| 在线精品免费视频| 四虎永久在线精品免费一区二区| 亚洲AV无码一区二区三区国产| 一级做性色a爰片久久毛片免费| 国产亚洲精品精品国产亚洲综合| 麻豆精品不卡国产免费看| 亚洲av色福利天堂| 欧美大尺寸SUV免费| 麻豆安全免费网址入口| 久久99亚洲综合精品首页| 国产婷婷成人久久Av免费高清| 色噜噜综合亚洲av中文无码| 成人午夜大片免费7777| 特级毛片aaaa免费观看| 亚洲av无码一区二区三区乱子伦| 亚洲黄色免费电影| 综合一区自拍亚洲综合图区| 亚洲中文字幕无码久久综合网| 91香蕉在线观看免费高清| 亚洲综合色一区二区三区| 国产成人亚洲精品影院| 精品一区二区三区免费毛片爱 | 91av免费在线视频| 亚洲视频2020| 免费a在线观看播放| 91精品国产免费入口| 麻豆69堂免费视频| 亚洲精品偷拍无码不卡av| www国产亚洲精品久久久日本|