zoukankan      html  css  js  c++  java
  • mysql分表操作

      一般分表操作有垂直拆分和水平拆分。顾名思义。

      1.  垂直拆分是指,这个表的列,即字段,要拆分成两个或多个表。

      这个应用场景比如:这个表字段,几个都是int、datetime等,有那么一个是text类型的,而这个text的字段还不是被经常检索,而其他几个字段要被经常检索。当出现效率问题时,我们可以考虑垂直拆分表。把这个text字段拆出来,可以提高检索效率。两个表建立关系可以利用原来表的主键。

      2.  水平拆分是指,把一个可能或者已经是大数据量的表拆分成多个表。

      一个表数据量很大时,比如超过百万或者更多,那么数据量仍然可能在扩充的时候,即便是加索引,检索效率也不高。很自然想到要表拆分。

      比如一张用户表,这个量会比较大。比如我根据业务的拓展形式,预算的量,我分成100张表。比如,user0,user1。。。user99。

      拆分以后,当然是尽可能让用户数据平均分散在各个表里。怎么对用户数据的存取呢?可以有多种方法,比如散列或者取模。

        1)取模方法(模上分表数):比如新增一个用户,我们可以利用数据库表的自增,建立一个专门生成主键id的表。利用这个表,我们得到用户表的最新id。比如生成的id是100,使用100%100,取模后是0,那么插入到user0表里;id是199,取模后插入user99里。

      存数据是这样,取数据同样道理。当我们知道这个用户的id后,比如是356,利用取模结果是56,我们就去user56表找这个id=356的数据。

        2)散列法:比如假设我们认为crc32()方法的后两位数字是随机生成的。

       返回表名的方法:

    <?php
    
    function userT($id){
        $table = "user";
        $str = crc32($table. $id);
        return $table. substr($str, -2, 2);
    }

      当然,如果不知道用户id,比如只知道昵称,去找用户数据。那么这样就比较坑爹了。就需要遍历表查找了。

      mysql分表有一篇文章写的不错,可以参考:http://blog.51yip.com/mysql/949.html

  • 相关阅读:
    Springboot之配置定时任务
    Java之随机生成各种类型的数据举例
    docker安装postgresql 12.4
    Java随机生成字符串举例
    Java生成UUID
    Shell case 多选择语句用法举例
    Elasticsearch学习之集群高级网络设置
    交叉熵损失函数
    将博客搬至CSDN
    SonarQube服务搭建
  • 原文地址:https://www.cnblogs.com/firstForEver/p/5228042.html
Copyright © 2011-2022 走看看