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信息,然后才能进行我们需要的查询操作。

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。