• 企业400电话
  • 网络优化推广
  • AI电话机器人
  • 呼叫中心
  • 全 部 栏 目

    网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    MySQL分表和分区的具体实现方法
    POST TIME:2021-10-18 20:28

    垂直分表

    垂直分表就是一个包含有很多列的表拆分成多个表,比如表A包含20个字段,现在拆分成表A1和A2,两个表各十个字段(具体如何拆根据业务来选择)。

    优势:在高并发的情境下,可以减少表锁和行锁的次数。

    劣势:在数据记录非常大的情况下,读写速度还是会遇到瓶颈。

    水平分表

    假如某个网站,它的数据库的某个表已经达到了上亿条记录,那么此时如果通过select去查询,在没有索引的情况下,他的查询会非常慢,那么就可以通过hash算法将这个表分成10个子表(此时每个表的 的数据量只有1000万条了)。

    同时生成一个总表,记录各个子表的信息,假如查询一条id=100的记录,它不再需要全表扫描,而是通过总表找到该记录在哪个对应的子表上,然后再去相应的表做检索,这样就降低了IO压力。

    劣势:会给前端程序应用程序的SQL代码的维护带来很大的麻烦,这时候可以使用MySQL的Merge存储引擎实现分表。

    ---------------------------------------我是蛋疼的分割线----------------------------------------------------

    用Merge存储引擎分表,对应用程序的SQL语句来说是透明的,不需要修改任何代码。

    CREATE TABLE t1 ( a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, message CHAR(20));
    CREATE TABLE t2 ( a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, message CHAR(20));
    INSERT INTO t1 (message) VALUES ('Testing'),('table'),('t1');
    INSERT INTO t2 (message) VALUES ('Testing'),('table'),('t2');
    CREATE TABLE total (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, message CHAR(20)) ENGINE=MERGE UNION=(t1,t2) INSERT_METHOD=LAST;

    在创建total表的时候可能报错:

    Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist

    实际上merge存储引擎是一个虚拟的表,对应的实际表必须是myisam类型的表,如果你的mysql是5.1以上版本,默认数据库使用的事InnoDB存储引擎的,所以在创建total时,t1和t2表必须是myisam存储引擎的。

    如果需要定期增加分表,只需要修改merge表的union即可。

    CREATE TABLE t3( a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, message CHAR(20));
    ALTER TABLE total UNION=(t1,t2,t3)

    横向分区

    举例说明:假如有100W条数据,分成十份,前10W条数据放到第一个分区,第二个10W条数据放到第二个分区,依此类推。取出一条数据的时候,这条数据包含了表结构中的所有字段,横向分区并没有改变表的结构。

    纵向分区

    举例说明:在设计用户表的时候,开始的时候没有考虑好,而把个人的所有信息都放到了一张表里面去,这个表里面就会有比较大的字段,如个人简介,而这些简介呢,也许不会有好多人去看,所以等到有人要看的时候,再去查找,分表的时候,可以把这样的大字段,分开来

    完整的一张表,都对应三个文件,一个.MYD数据文件,.MYI索引文件,.frm表结构文件。

    您可能感兴趣的文章:
    • MySQL高级特性——数据表分区的概念及机制详解
    • MySql分表、分库、分片和分区知识深入详解
    • MySql分表、分库、分片和分区知识点介绍
    • mysql通过Navicat分区实操讲解
    • MySQL分区表的正确使用方法
    • Mysql优化之Zabbix分区优化
    • MySQL分区字段列有必要再单独建索引吗?
    • MySQL数据库表分区注意事项大全【推荐】
    • Mysql数据表分区技术PARTITION浅析
    • MySQL数据表分区策略及优缺点分析
    上一篇:简单了解操作mysql数据库的命令行神器mycli
    下一篇:简单了解添加mysql索引的3条原则
  • 相关文章
  • 

    关于我们 | 付款方式 | 荣誉资质 | 业务提交 | 代理合作


    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    X

    截屏,微信识别二维码

    微信号:veteran88

    (点击微信号复制,添加好友)

     打开微信