mysql数据库性能优化 - 表优化
数据库对象优化
1、优化表的数据类型
- 使用procedure analyse()对当前应用的表进行分析,该函数可以对数据表中的列的数据类型提出优化建议。select * from tb1_name procedure analyse();
2、通过拆分提高表的访问效率--分库分表
- 垂直拆分:把主码和一些列放到一个表,然后把主码和另外的列放到另一个表中
- 水平拆分:根据一列或多列数据的值把数据行放在两个独立的表中。
3、逆规范化
4、使用中间表提高统计查询速度
5、表维护
1)找到并修复损坏的表
2)更新索引统计信息
3)减少索引和数据的碎片
- 分析表:analyze table sales;
- 检查表:check table sales;
- 优化表:optimize table sales;
分库分表
1、分库分表策略演进
1)单库单表:最常见的数据库设计,例如,有一张用户表放在数据库db中,所有用户都可以在db库中的use表中查到
2)单库多表:随着用户数量的增加,user表的数据量越来越大,当数据量达到一定程度的时候对user表的查询会逐渐的变慢,从而影响整个db的性能,如果使用mysql,还有一个更严重的问题是,当需要添加一列的时候,mysql会锁表,期间所有的读写操作只能等待。可以通过某种方式将user进行拆表,产生两个表结构完全一样的user_0000、user_0001等表,user_0000+user_0001+...的数据刚好是一份完整的数据。
3)多库多表:随着数据量增加,也行单台db的存储空间不够,随着查询量的增加,单台数据库服务器已经没办法支撑,这时候可以再对数据库进行拆分。
2、分库分表规则
1)按号段分:user_id区分,1~1000的对应db1,1001~2000的对应db2,以此类推
2)hash取模分:对user_id进行hash(或者user_id是数值型的话可以直接使用user_id的值),然后用一个特定的数字,比如应用中需要将一个数据库切分为4个数据库的话,就用4这个数字对user_id的hash值进行取模运算,也就是user_id%4。
3)在认证库中保存数据库配置:就是建立一个db,这个db单独保存user_id到db的映射关系,每次访问数据库的时候都要查询一次这个数据库,以得到具体的db信息,然后才能进行我们需要的查询操作。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。