8. mysql> flush status; mysql> select * from testsort order by name; mysql> select * from information_schema.session_status where variable_name in ('created_tmp_files','sort_merge_passes'); +-------------------+----------------+ | VARIABLE_NAME | VARIABLE_VALUE | +-------------------+----------------+ | CREATED_TMP_FILES | 3 | | SORT_MERGE_PASSES | 3 | +-------------------+----------------+ mysql> flush status; mysql> select id,name from testsort order by name; mysql> select * from information_schema.session_status where variable_name in ('created_tmp_files','sort_merge_passes'); +-------------------+----------------+ | VARIABLE_NAME | VARIABLE_VALUE | +-------------------+----------------+ | CREATED_TMP_FILES | 0 | | SORT_MERGE_PASSES | 0 | +-------------------+----------------+
9. FILESORT select id,name,address from testsort order by name; order by namename varchar(50) utf8 50utf850*32(150*2+2)/3=100 name1101 select id,name,address id int4name50*3+1+1=1521150255 nameaddress1bit char*8sort buffer 101+4+152+769+1+8=1035
10. mysql> set sort_buffer_size=1035*122881; flush status; mysql> select * into outfile '/data/dump/sort.txt' from testsort order by name; Query OK, 122881 rows affected (0.56 sec) mysql> select * from information_schema.session_status where variable_name in ('created_tmp_files','sort_merge_passes'); +-------------------+----------------+ | VARIABLE_NAME | VARIABLE_VALUE | +-------------------+----------------+ | CREATED_TMP_FILES | 0 | | SORT_MERGE_PASSES | 0 | +-------------------+----------------+ mysql> set sort_buffer_size=1035*122880; flush status; mysql> select * into outfile '/data/dump/sort.txt' from testsort order by name; Query OK, 122881 rows affected (0.91 sec) mysql> select * from information_schema.session_status where variable_name in ('created_tmp_files','sort_merge_passes'); +-------------------+----------------+ | VARIABLE_NAME | VARIABLE_VALUE | +-------------------+----------------+ | CREATED_TMP_FILES | 2 | | SORT_MERGE_PASSES | 1 | +-------------------+----------------+
11. FILESORT mysql> set max_length_for_sort_data=1024; //filesort1035 mysql> set sort_buffer_size=117*122881; //filesort mysql> flush status; // KEY88 mysql> show global status like 'innodb_rows_read'; +------------------+---------+ | Variable_name | Value | +------------------+---------+ | Innodb_rows_read | 1720348 | +------------------+---------+ mysql> select * into outfile '/data/dump/sort.txt' from testsort order by name; Query OK, 122881 rows affected (0.66 sec) mysql> select * from information_schema.session_status where variable_name in ('created_tmp_files','sort_merge_passes','innodb_rows_read'); +-------------------+----------------+ | VARIABLE_NAME | VARIABLE_VALUE | +-------------------+----------------+ | CREATED_TMP_FILES | 0 | //sort_buffer_size | INNODB_ROWS_READ | 1966110 | //1966110 - 1720348 = 245762 | SORT_MERGE_PASSES | 0 | //122881 +-------------------+----------------+