11
Creating sort index是指数据库在执行排序操作时,创建一个内部临时表来存储排序结果的过程。这个过程通常发生在执行包含排序操作的查询时,例如ORDER BY语句。
创建排序索引的过程
内部临时表:数据库会使用一个内部临时表来存储排序结果。这个临时表用于暂存排序过程中的数据,直到排序完成。
排序操作:数据库会对查询结果进行排序,这个过程需要消耗大量的计算资源和临时存储空间。
索引创建:在排序完成后,数据库会创建一个索引来优化查询性能,这个索引就是所谓的“排序索引”。
创建排序索引的影响
性能影响:创建排序索引的过程可能会消耗大量的CPU和内存资源,尤其是在处理大量数据时。这可能会导致查询响应时间延长。
资源消耗:创建排序索引需要额外的存储空间和计算资源,可能会对数据库的整体性能产生影响。
优化建议:
增加索引:确保相关列上有适当的索引可以减少排序操作的需求。
优化查询:避免在不需要排序的查询中使用ORDER BY,或者尽量减少排序的数据量。
调整配置:通过调整数据库的配置参数,如增加临时表的大小限制,可以缓解资源压力。
临时表是执行sql语句过程中创建的中间过渡表,例如多表联合操作,就需要建立临时表
查看临时表的使用状态
mysql>show global status like ‘created_tmp%’;
created_tmp_tables 每次创建临时表时都会增加
created_tmp_disk_tables 如果是在磁盘上创建临时表,它会增加
created_tmp_files 表示MySQL服务创建的临时文件数
比较理想的配置是:
created_tmp_disk_tables / created_tmp_tables *100% <= 25%
再看一下临时表的配置:
show variables like ‘%tmp_table_size%’;
tmp_table_size的默认值是32M,说明只有32M以下的临时表才能全部放在内存中,超过的就会用到硬盘临时表
可以适当增加此变量的值,例如
mysql> set session tmp_table_size=40000000;
因为tmp_table_size变量是有作用域的,所以使用 ‘session’
max_connections=500
max_allowed_packet=500M
innodb_buffer_pool_size = 10240M
join_buffer_size = 32M
sort_buffer_size = 2M
read_rnd_buffer_size = 2M
key_buffer_size=64M
log-bin = mysql-bin
slave-skip-errors=all