MySQL排序使用情況
MySQL排序會增加Sort_merge_passes ,MySQL 就會把每次在內(nèi)存中排序的結(jié)果存到臨時(shí)文件中,找到記錄后,會再次排序。
MySQL排序使用情況:
- mysql> show global status like 'sort%';
- +-------------------+------------+
- | Variable_name | Value |
- +-------------------+------------+
- | Sort_merge_passes | 29 |
- | Sort_range | 37432840 |
- | Sort_rows | 9178691532 |
- | Sort_scan | 1860569 |
- +-------------------+------------+
Sort_merge_passes 包括兩步。MySQL 首先會嘗試在內(nèi)存中做排序,使用的內(nèi)存大小由系統(tǒng)變量 Sort_buffer_size 決定,如果它的大小不夠把所有的記錄都讀到內(nèi)存中,MySQL 就會把每次在內(nèi)存中排序的結(jié)果存到臨時(shí)文件中,等 MySQL 找到所有記錄之后,再把臨時(shí)文件中的記錄做一次排序。
再次排序就會增加 Sort_merge_passes。實(shí)際上,MySQL 會用另一個(gè)臨時(shí)文件來存再次排序的結(jié)果,所以通常會看到 Sort_merge_passes 增加的數(shù)值是建臨時(shí)文件數(shù)的兩倍。
因?yàn)橛玫搅伺R時(shí)文件,所以速度可能會比較慢,增加 Sort_buffer_size 會減少 Sort_merge_passes 和 創(chuàng)建臨時(shí)文件的次數(shù)。但盲目的增加 Sort_buffer_size 并不一定能提高速度。
另外,增加read_rnd_buffer_size(3.2.3是record_rnd_buffer_size)的值對排序的操作也有一點(diǎn)的好處。
【編輯推薦】