mysql查询优化

本文探讨在处理大规模数据时,通过调整MySQL的tmp_table_size和max_heap_table_size配置,解决多线程操作导致的速度瓶颈问题。实验表明,合理设置内存配置可以显著提升查询与更新性能,实现5倍速度提升。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在做数据批量查询和更新,即从表1中group by 某个字段,然后对另外一列求和,最后将求和得到的字段更新到表2里去。由于表一比较大而且跟表1同类的表很多,所以想用多线程解决问题,即多个表一同时做相同的查询,然后分别导入多个跟表2同类的表。
在实验的时候,发现一个线程(即一个表1到一个表2)最快,两个线程(同时两个表一类型的表到两个表二类型的表)次之,线程越多速度越慢,且成指数递减。在数据查询的时候用命令show processlist;无意中发现这个查询有个状态copy xxx to tmp table on disk.然后去网上查了下,发现是由于tmp_table_size和max_heap_table_size设置过小,导致查询时候的临时表在内存放不下,然后转移成磁盘临时表了。tmp_table_size规定了内部内存临时表的最大值,每个线程都要分配。(实际起限制作用的是tmp_table_size和max_heap_table_size的最小值。)如果内存临时表超出了限制,MySQL就会自动地把它转化为基于磁盘的MyISAM表,存储在指定的tmpdir目录下。
通过增大上述两个配置项的值,解决了问题。同时开五个线程,每个线程的处理速度跟单线程速度一样快。总的来说就是快了5倍。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值