mysql order的實現與優化

2021-08-30 07:18:17 字數 722 閱讀 2486

[b]mysql排序的實現有兩種方式[/b]

[list]

[*]通過索引字段

[*]通過排序演算法

[/list]

由於索引欄位是排好序的,當使用索引過的字段來排序時 mysql理所當然的會用索引欄位啦

如果排序字段不是索引那就只能用排序演算法

使用排序演算法意味著效能的下降

mysql需要先從儲存引擎中查詢出資料 然後通過排序演算法在記憶體中排序,既消耗記憶體有消耗cpu

[b]排序演算法有兩種[/b]

第一種:先取出排序欄位和記錄指標進行排序,然後再根據記錄指標返回其他字段

缺點:要進行2次io

第二種:直接取出所有記錄在記憶體中,把不需要排序的字段單獨放在一塊記憶體塊中,然後在 sort buffer中對排序欄位和指標排序,最後與記憶體塊中資料合併

很明顯第二種演算法效能更好 但是要使用更多的記憶體,[b]是典型的空間換時間的做法[/b]

另外在join查詢排序中可能會使用臨時表排序,即先將join後結果集存入臨時表,然後使用sort buffer來排序,採用臨時表的效能更差

[b]那麼如何來優化排序呢?[/b]

1 優先使用索引字段排序 必要時可為排序建索引,當然事先要權衡好

2 盡量使用第二種排序演算法 減少io

3 加大max_length_for_sort_data的設定

4 去掉不必要的返回字段

5 增大sort_buffer_size設定

Inotify實現實時備份與調優

inotify是一種強大的 細粒度的 非同步的檔案系統監控機制,linux核心2.6.13起,加入了inotify支援,通過inotify可以監控檔案系統中新增 刪除 修改 移動等各種事件,利用這個核心介面,inotify就可以監控檔案系統下的變化。安裝inotify 1 檢視核心是否支援 unam...

uitableview cell實現效能優化

如果你想要如絲般順滑的效果,那麼 1 每次都看一下有沒有能重用的 cell,而不是永遠重新新建 這個是 uitableview 的常識 2 載入放到後台程序去進行,滾出可視範圍的載入程序要 cancel 掉 3 圓角 陰影之類的全部 bitmap 化,或者放到後台 draw 好了再拿來用 4 cel...

Android公告欄的幾種實現方式與優缺點

1.最常用的方法,使用viewflipper 系統的迴圈滾動控制項,用著也相當的簡單,寫好進入與離開的動畫然後設定也非常簡單,但是有幾個小的問題 第一更新資料問題,因為它的工作機制導致的它載入的所有控制項實際上都已經存在於布局之上只是屬性設定為了gone不可見 而已,實際上在大量布局的情況下他是相當...