zoukankan      html  css  js  c++  java
  • MySQL千万级大表优化策略

    =========优化的顺序===============
    (是根据MySQL优化的效果和优化所需的成本)
    第一 优化你的sql和索引;
      sql中的一些in、join等子查询效率完全可以用表连接来代替;索引一般是根据sql语句来建立,并且最好和主键或者用户常用的条件相关。
    第二 做归档,可以根据表数据的业务类型进行归档。也可以看做是表的数据条数拆分。
      比如tc_history库的数据,根据时间进行归档操作,将原来的trade_order_detail表按某时间字段(一般以有索引的业务时间字段midified)拆分为trade_order_detail_2013等等。
    第三 加缓存,memcached,redis;
      缓存式数据库需要搭配源码搭建的数据库。与阿里云的RDS估计不大行。
    第四  主从复制或主主复制,读写分离,可以在应用层做,效率高,也可以用三方工具,第三方工具推荐360的atlas;
    第五 mysql自带分区表,对应用透明,无需更改代码,但是sql语句是需要针对分区表做优化的,sql条件中要带上分区条件的列,从而使查询定位到少量的分区上,否则就会扫描全部分区,;
    第六  先做垂直拆分,其实就是根据模块的耦合度,将一个大的系统分为多个小的系统,也就是分布式系统;
      第二点的归档操作需要考虑归档表对业务上的影响(比如归档之后的表是否只需要查询,可以合理更换引擎tokudb等等);
    第七  水平切分,针对数据量大的表,这一步最麻烦,最能考验技术水平,要选择一个合理的sharding key,为了有好的查询效率,表结构也要改动,做一定的冗余,应用也要改,sql中尽量带sharding key,将数据定位到限定的表上去查,而不是扫描全部的表;
    水平切分大致就是指将一张数据表中的字段切分,然后存储在多个数据表中,但这样的话,势必会需要程序代码和数据结构有较大的改动。
    例如根据tenant取模来分库就是横向扩展;分库会使单表的数据量减少(tc减半),数据量一旦减小的话,很多问题都可以迎刃而解。
    (拆分来提高表的访问效率:)
     
    =====综合业务特点=======
    对于一个存储设计,必须考虑业务特点,收集的信息如下:
    1.数据的容量:1-3年内会大概多少条数据,每条数据大概多少字节;
      表informaton_schema.tables 字段:table_rows和avg_row_length
    2.数据项:是否有大字段,那些字段的值是否经常被更新;
      字段类型是否有text或者blob;另外varchar字段为null的数据,索引效率也是极其低的。
    3.数据查询SQL条件:哪些数据项的列名称经常出现在WHERE、GROUP BY、ORDER BY子句中等;
      一般出现order by create_Date这些语句的时候,表的设计一刚开始就应该设计为id自增,然后以id 去order by 或者直接找到准确的id
    4.数据更新类SQL条件:有多少列经常出现UPDATE或DELETE 的WHERE子句中;
    5.SQL量的统计比,如:SELECT:UPDATE+DELETE:INSERT=多少?
    6.预计大表及相关联的SQL,每天总的执行量在何数量级?
    7.表中的数据:更新为主的业务 还是 查询为主的业务
    8.打算采用什么数据库物理服务器,以及数据库服务器架构?
    9.并发如何?
    10.存储引擎选择InnoDB还是MyISAM?
    一般会选择使用innodb引擎,表结构不方便更改的情况下,多利用内存,减轻IO负载,数据库的瓶颈一般都会卡在IO上;
  • 相关阅读:
    进度条
    html5 表单新增事件
    html5 表单的新增type属性
    html5 表单的新增元素
    html5 语义化标签
    jq 手风琴案例
    codeforces 702D D. Road to Post Office(数学)
    codeforces 702C C. Cellular Network(水题)
    codeforces 702B B. Powers of Two(水题)
    codeforces 702A A. Maximum Increase(水题)
  • 原文地址:https://www.cnblogs.com/Kid-Zhou/p/8276263.html
Copyright © 2011-2022 走看看