bitsCN.com
1、分库分表
很明显,一个主表(也就是很重要的表,例如用户表)无限制的增长势必严重影响性能,分库与分表是一个很不错的解决途径,也就是性能优化途径,现在的案例是我们有一个1000多万条记录的用户表members,查询起来非常之慢,同事的做法是将其散列到100个表中,分别从members0到members99,然后根据mid分发记录到这些表中,牛逼的代码大概是这样子:
for($i=0;$i//echo "CREATE TABLE db2.members{$i} LIKE db1.members
";
echo "INSERT INTO members{$i} SELECT * FROM members WHERE mid%100={$i}
";
}
?>
2、不停机修改mysql表结构
同样还是members表,前期设计的表结构不尽合理,随着数据库不断运行,其冗余数据也是增长巨大,同事使用了下面的方法来处理:
先创建一个临时表:
/*创建临时表*/
CREATE TABLE members_tmp LIKE members
然后修改members_tmp的表结构为新结构,接着使用上面那个for循环来导出数据,因为1000万的数据一次性导出是不对的,mid是主键,一个区间一个区间的导,基本是一次导出5万条吧,这里略去了
接着重命名将新表替换上去:
/*这是个颇为经典的语句哈*/
RENAME TABLE members TO members_bak,members_tmp TO members;
就是这样,基本可以做到无损失,无需停机更新表结构,但实际上RENAME期间表是被锁死的,所以选择在线少的时候操作是一个技巧。经过这个操作,使得原先8G多的表,一下子变成了2G多
另外还讲到了mysql中float字段类型的时候出现的诡异现象,就是在pma中看到的数字根本不能作为条件来查询.感谢zj同学的新鲜分享。bitsCN.com
MYSQL性能优化分享(分库分表)_MySQL-mysql教程-
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。
相关推荐
- c语言函数指针作为返回值怎么用-C++-
- python网络自动化运维脚本是什么-办公软件-
- 电饭煲e4故障怎么解决-常见问题-
- Bootstrap如何调试-Bootstrap教程-
- Bootstrap结果在哪里查看-Bootstrap教程-
- PS载入慢与硬盘速度有关吗?-PS教程-
- 《真三国无双:起源》武器介绍:护手、剑、枪、飞圈、朴刀-主机专区-
- 小米 BL 解锁规则调整:明年 1 月起最多支持申请通过用户在权限期内解锁 1 台绑定设备-手机新闻-
- 机械革命 CES 2025 笔记本电脑新品预热:A 面外壳采用特殊工艺-硬件新闻-
- AMD Radeon RX 9070 XT 显卡被曝游戏测试中和 RTX 4080 区别在 5% 以内-硬件新闻-