mysql 水平分表

新建10张表,user_0,user_1,...user_9,方法不可串用,采用hash或取余法,获取要操作的表名,取值用对应存值的方法

1.hash取余法

public function part_table(){

        $id=uniqid();                       //php生成唯一 uuid
        $str = crc32($id);                  //hash 算法转换
        $table_name = ‘user_‘.$str%10;      //取余获取 表名

        $user[‘id‘]=$id;
        $user[‘age‘]=‘20‘;
        $user[‘name‘]=‘小猪_‘.time();

        db($table_name)->insert($user);      //插入数据库

        echo $table_name;
    }

2.hash

public function part_table(){

        $id=uniqid();                            //php生成唯一 uuid
        $str = crc32($id);                       //hash 算法转换
        $hash = substr($str, 0, 1);
        $table_name = ‘user_‘.$hash;             //获取 表名

        $user[‘id‘]=$id;
        $user[‘age‘]=‘20‘;
        $user[‘name‘]=‘小猪_‘.time();

        db($table_name)->insert($user);      //插入数据库

        echo $table_name;
    }

原文地址:https://www.cnblogs.com/songxuan/p/10177867.html

时间: 2024-08-29 01:49:55

mysql 水平分表的相关文章

mysql中的优化, 简单的说了一下垂直分表, 水平分表(有几种模运算),读写分离.

一.mysql中的优化 where语句的优化 1.尽量避免在 where 子句中对字段进行表达式操作select id from uinfo_jifen where jifen/60 > 10000;优化后:Select id from uinfo_jifen where jifen>600000; 2.应尽量避免在where子句中对字段进行函数操作,这将导致mysql放弃使用索引 select uid from imid where datediff(create_time,'2011-11

MySQL常见水平分表技术方案

根据经验,Mysql表数据一般达到百万级别,查询效率会很低,容易造成表锁,甚至堆积很多连接,直接挂掉:水平分表能够很大程度较少这些压力. 1.按时间分表 这种分表方式有一定的局限性,当数据有较强的实效性,如微博发送记录.微信消息记录等,这种数据很少有用户会查询几个月前的数据,如就可以按月分表.2.按区间范围分表 一般在有严格的自增id需求上,如按照user_id水平分表:table_1  user_id从1~100wtable_2  user_id从101~200wtable_3  user_i

mysql数据库的水平分表与垂直分表实例讲解

mysql语句的优化有局限性,mysql语句的优化都是围绕着索引去优化的,那么如果mysql中的索引也解决不了海量数据查询慢的状况,那么有了水平分表与垂直分表的出现(我就是记录一下自己的理解) 水平分表: 如上图所示:另外三张表表结构是一样的 只不过把数据进行分别存放在这三张表中,如果要insert 或者query 那么都需要对id进行取余 然后table名进行拼接,那么就是一张完整的table_name 但是如果我需要对name进行分表呢 或者对email呢? 那么就需要用MD5进行加密 因为

玩转SpringBoot之整合Mybatis拦截器对数据库水平分表

利用Mybatis拦截器对数据库水平分表 需求描述 当数据量比较多时,放在一个表中的时候会影响查询效率:或者数据的时效性只是当月有效的时候:这时我们就会涉及到数据库的分表操作了.当然,你也可以使用比较完善的第三方组件:sharding-jdbc来实现:但是你使用后会发现,貌似对oracle的兼容性不是很好.所以最后我还是决定使用Mybatis拦截器对数据库进行水平分表. 为什么要选用Mybatis拦截器 拦截器:我们可以拦截某些方法的调用,我们可以选择在这些被拦截的方法执行前后加上某些逻辑,也可

Mybatis批量Insert及水平分表

首先是Mybatis批量insert 说一下核心部分,整个工程参考我的github,运行的main方法在org/xiongmaotailang/mybatis/batchinsert/DbUtil.java中,涉及到的脚本是sql.txt 需要的数据表示例,包括4个字段. CREATE TABLE `newspvuv` (   `id` int(10) unsigned NOT NULL AUTO_INCREMENT,   `pv` bigint(11) DEFAULT NULL,   `uv`

mysql15--垂直分表水平分表

?分表技术(表的结构不能变) 分表技术有(水平分割和垂直分割) 当一张越来越大时候,即使添加索引还慢的话,我们可以使用分表 以qq用户表来具体的说明一下分表的操作. 思路如图 : 首先我创建三张表 user0 / user1 /user2 , 然后我再创建 uuid表,该表的作用就是提供自增的id, 插入的时候插入到不同的表中去. 走代码: create table user0( id int unsigned primary key , name varchar(32) not null de

数据库水平分表(一个大数据量的表)

一.当一张表很大时,比如微信账号.facebook账号.QQ号.谷歌账号系统等,都是大数据量的一张表结构.那么必然需要进行拆分,即水平拆分. 二.表的水平拆分规则. 原文地址:https://www.cnblogs.com/igoodful/p/8974988.html

MySQL的分表和分区介绍

在日常开发或维护中经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表.这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下,如果涉及联合查询的情况,性能会更加糟糕.分表和表分区的目的就是减少数据库的负担,提高数据库的效率,通常点来讲就是提高表的增删改查效率. 一.什么是分表: 分表是将一个大表按照一定的规则分解成多张具有独立存储空间的实体表,我们可以称为子表,每个表都对应三个文件,MYD数据文件,.MYI索引文件,.frm表结构文件.这些子表可以分布在同一块磁盘上,

Mycat(4):消息表mysql数据库分表实践

本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/46882777 未经博主允许不得转载. 1,业务需求 比如一个社交软件,比如像腾讯的qq.可以进行群聊天(gid),也可以单人聊天. 这里面使用到了数据库中间件mycat,和mysql数据表分区. 关于mycat分区参考: [ 数据库垂直拆分,水平拆分利器,cobar升级版mycat] http://blog.csdn.net/freewebsys/article/details