Mysql中排序在SQL最佳化中的部分解析

來源:互聯網
上載者:User

        在mysql中,相關的複製的sql語句,會對所要搜取得結果進行規整,這裡就有排序,分組,統計等相關整理過程,其中排序的演算法的意義最為重要,在mysql不同的版本中,特別是在5.1系列以後對排序演算法的定義不斷加強改善;

        在排序演算法中對新舊演算法當中提到的陣列的寬度,以及函數搜取的範圍,大小,影響的高度等都進行了修改,並設定相關的閥值,以指導相關的參數自動閉合;以下是在5.5系列中相關的sort檔案截取;

 

#define UT_SORT_FUNCTION_BODY(SORT_FUN, ARR, AUX_ARR, LOW, HIGH, CMP_FUN)\{\ulintut_sort_mid77;\ulintut_sort_i77;\ulintut_sort_low77;\ulintut_sort_high77;\\ut_ad((LOW) < (HIGH));\ut_ad(ARR);\ut_ad(AUX_ARR);\\if ((LOW) == (HIGH) - 1) {\return;\} else if ((LOW) == (HIGH) - 2) {\if (CMP_FUN((ARR)[LOW], (ARR)[(HIGH) - 1]) > 0) {\(AUX_ARR)[LOW] = (ARR)[LOW];\(ARR)[LOW] = (ARR)[(HIGH) - 1];\(ARR)[(HIGH) - 1] = (AUX_ARR)[LOW];\}\return;\}\\ut_sort_mid77 = ((LOW) + (HIGH)) / 2;\\SORT_FUN((ARR), (AUX_ARR), (LOW), ut_sort_mid77);\SORT_FUN((ARR), (AUX_ARR), ut_sort_mid77, (HIGH));\\ut_sort_low77 = (LOW);\ut_sort_high77 = ut_sort_mid77;\\for (ut_sort_i77 = (LOW); ut_sort_i77 < (HIGH); ut_sort_i77++) {\\if (ut_sort_low77 >= ut_sort_mid77) {\(AUX_ARR)[ut_sort_i77] = (ARR)[ut_sort_high77];\ut_sort_high77++;\} else if (ut_sort_high77 >= (HIGH)) {\(AUX_ARR)[ut_sort_i77] = (ARR)[ut_sort_low77];\ut_sort_low77++;\} else if (CMP_FUN((ARR)[ut_sort_low77],\   (ARR)[ut_sort_high77]) > 0) {\(AUX_ARR)[ut_sort_i77] = (ARR)[ut_sort_high77];\ut_sort_high77++;\} else {\(AUX_ARR)[ut_sort_i77] = (ARR)[ut_sort_low77];\ut_sort_low77++;\}\}\\memcpy((void*) ((ARR) + (LOW)), (AUX_ARR) + (LOW),\       ((HIGH) - (LOW)) * sizeof *(ARR));\}\

參數max_length_for_sort_data;

 

在MySQL中,決定使用第一種老式的排序演算法還是新的改進演算法的依據是通過參數max_length_for_sort_data來決定的。當我們所有返回欄位的最大長度小於這個參數值的時候,MySQL就會選擇改進後的排序演算法,反之,則選擇老式的演算法。所以,如果我們有充足的記憶體讓MySQL存放需要返回的非排序欄位的時候,可以加大這個參數的值來讓MySQL選擇使用改進版的排序演算法。

參數sort_buffer_size;

增大sort_buffer_size並不是為了讓MySQL可以選擇改進版的排序演算法,而是為了讓MySQL可以盡量減少在排序過程中對需要排序的資料進行分段,因為這樣會造成MySQL不得不使用暫存資料表來進行交換排序。

還有就是對相關的欄位進行規避;選擇返回需要的即可;

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.