加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

记录一次MySQL两万万数据的大表优化办理进程,提供三种办理方案

发布时间:2019-03-01 15:31:48 所属栏目:编程 来源:王帅
导读:题目概述 行使阿里云rds for MySQL数据库(就是MySQL5.6版本),有个用户上网记录表6个月的数据量近2000万,保存最近一年的数据量到达4000万,查询速率极慢,一般卡死。严峻影响营业。 题目条件:老体系,其时计划体系的人或许是大学没结业,表计划和sql语句

对用户来说,分区表是一个独立的逻辑表,可是底层由多个物理子表构成,实现分区的代码现实上是通过对一组底层表的工具封装,但对SQL层来说是一个完全封装底层的黑盒子。MySQL实现分区的方法也意味着索引也是凭证分区的子表界说,没有全局索引

用户的SQL语句是必要针对分区表做优化,SQL前提中要带上分区前提的列,从而使查询定位到少量的分区上,不然就会扫描所有门区,可以通过EXPLAIN PARTITIONS来查察某条SQL语句会落在那些分区上,从而举办SQL优化,我测试,查询时不带分区前提的列,也会进步速率,故该法子值得一试。

分区的甜头是:

  1. 可以让单表存储更多的数据
  2. 分区表的数据更轻易维护,可以通过清晰整个分区批量删除大量数据,也可以增进新的分区来支持新插入的数据。其它,还可以对一个独立分区举办优化、搜查、修复等操纵
  3. 部门查询可以或许从查询前提确定只落在少数分区上,速率会很快
  4. 分区表的数据还可以漫衍在差异的物理装备上,从而搞笑操作多个硬件装备
  5. 可以行使分区表赖停止某些非凡瓶颈,譬喻InnoDB单个索引的互斥会见、ext3文件体系的inode锁竞争
  6. 可以备份和规复单个分区

分区的限定和弱点:

  1. 一个表最多只能有1024个分区
  2. 假如分区字段中有主键可能独一索引的列,那么全部主键列和独一索引列都必需包括进来
  3. 分区表无法行使外键束缚
  4. NULL值会使分区过滤无效
  5. 全部分区必需行使沟通的存储引擎

分区的范例:

  1. RANGE分区:基于属于一个给定持续区间的列值,把多行分派给分区
  2. LIST分区:相同于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值荟萃中的某个值来举办选择
  3. HASH分区:基于用户界说的表达式的返回值来举办选择的分区,该表达式行使将要插入到表中的这些行的列值举办计较。这个函数可以包括MySQL中有用的、发生非负整数值的任何表达式
  4. KEY分区:相同于按HASH分区,区别在于KEY分区只支持计较一列或多列,且MySQL处事器提供其自身的哈希函数。必需有一列或多列包括整数值
  5. 详细关于mysql分区的观念请自行google或查询官方文档,我这里只是抛砖引玉了。

我起首按照月份把上网记录表RANGE分区了12份,查询服从进步6倍阁下,结果不明明,故:换id为HASH分区,分了64个分区,查询速率晋升明显。题目办理!

功效如下:

  1. PARTITION BY HASH (id)PARTITIONS 64 
  1. select count() from readroom_website; --11901336行记录  
  2. / 受影响行数: 0 已找到记录: 1 告诫: 0 一连时刻 1 查询: 5.734 sec. /  
  3. select * from readroom_website where month(accesstime) =11 limit 10;  
  4. / 受影响行数: 0 已找到记录: 10 告诫: 0 一连时刻 1 查询: 0.719 sec. */ 

4、分表

分表就是把一张大表,凭证如上进程都优化了,照旧查询卡死,那就把这个表分成多张表,把一次查询分成多次查询,然后把功效组合返回给用户。

分表分为垂直拆分和程度拆分,凡是以某个字段做拆分项。好比以id字段拆分为100张表: 表名为 tableName_id%100

但:分表必要修改源措施代码,会给开拓带来大量事变,极大的增进了开拓本钱,故:只得当在开拓初期就思量到了大量数据存在,做好了分表处理赏罚,不得当应用上线了再做修改,本钱太高!!!并且选择这个方案,都不如选择我提供的第二第三个方案的本钱低!故不提议回收。

5、分库

把一个数据库分成多个,提议做个读写疏散就行了,真正的做分库也会带来大量的开拓本钱,得不偿失!不保举行使。

方案二具体声名:进级数据库,换一个100%兼容mysql的数据库

mysql机能不可,那就换个。为担保源措施代码不修改,担保现有营业安稳迁徙,故必要换一个100%兼容mysql的数据库。

开源选择

  1. tiDB https://github.com/pingcap/tidb
  2. Cubrid https://www.cubrid.org/
  3. 开源数据库会带来大量的运维本钱且其家产品格和MySQL另有差距,有许多坑要踩,假如你公司要求必需自建数据库,那么选择该范例产物。

云数据选择

  1. 阿里云POLARDB
  2. https://www.aliyun.com/product/polardb?spm=a2c4g.11174283.cloudEssentials.47.7a984b5cS7h4wH

官方先容语:POLARDB 是阿里云自研的下一代相关型漫衍式云原生数据库,,100%兼容MySQL,存储容量最高可达 100T,机能最高晋升至 MySQL 的 6 倍。POLARDB 既融合了贸易数据库不变、靠得住、高机能的特性,又具有开源数据库简朴、可扩展、一连迭代的上风,而本钱只需商用数据库的 1/10。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读