(最近在学习mysql优化的一些问题,以下为个人一些收获,如有不足,敬请提出!)

概述:当一个表的数据很大,比如200G,这时太大,我们只靠索引也不好使了,这时我们需要分表和分区处理。分表有两种形式(水平分表和垂直分表)。

一、水平分表

  核心思想:把一个大表,分割N个小表,小表和大表结构一样,只是把数据分散到不同的表中。

  1.1 简单例子:比如说是通过ID直接登录(例如QQ号),可以直接使用下面的例子

    

    每次登录验证的时候只要把传过来的Id除3取模,根据模可以找到对应的表,然后再去对应的表做查询操作,以下为php的相关操作,注册以及登录。

    register.php

      

 <?php
//接收参数
//测试的参数有:Pwd,Name, Email
extract($_POST); //检查是否为空
if(empty($Pwd) || empty($Name) || empty($Email)){
die('参数不能为空!');
} //连接数据库
$link = mysql_connect('127.0.0.1:3306','root', 'root');
if(!$link){
die('数据库连接失败!');
} //选择数据库:这个数据库有:uuid表(产生Id的表)、User0表(存放模为0的用户信息)、User1表(存放模为1的用户信息)和User2表(存放模为2的用户信息)
mysql_select_db('test'); $sql = 'INSERT INTO uuid VALUES(null)';
if(mysql_query($sql, $link)){
//获取刚刚插入的Id
$id = mysql_insert_id(); //根据 Id%3 来确定该新用户存放的表
$table_name = 'User'.$Id%3; $pwd = md5($Pwd);
$sql = "INSERT INTO $table_name VALUES($id, $Name, $pwd, $Email )"; if(mysql_query($sql, $link)){
echo '注册成功!';
}else{
echo '注册失败!';
}
}

register.php

    login.php

      

 <?php
header("Content-Type:text/html;charset:utf-8"); //接收参数:Id, Pwd
extract($_POST); //判断是否为空
if(empty($Id) || empty($Pwd)){
die('参数不能为空!');
} //连接数据库
$link = mysql_connect('127.0.0.1:3306', 'root', 'root');
if(!$link){
die('连接失败!');
} //选择数据库
mysql_select_db('test'); $table_name = 'User'.$Id%3;
$sql = "SELECT * FROM $table_name WHERE Id = $Id";
$rst = mysql_query($sql, $link); if($row = mysql_fetch_assoc($rst)){
$db_pwd = $row['Pwd']; if($db_pwd == md5($Pwd)){
echo '登录成功!';
}else{
echo '用户名或者密码错误!';
}
}else{
echo 'Id错误!';
}

login.php

  1.1 通过邮箱登录,通过邮箱对表进行分割

    

    邮箱基本原理都是和Id差不多,就是要通过一个算法把md5字符串转成十进制的数,然后再取模,以下为把十六进制的md5字符串转成十进制的函数。

    

    

    

mysql分表技术(学习心得)的更多相关文章

  1. mysql分表技术

    一般来说,当我们的数据库的数据超过了100w记录的时候就应该考虑分表或者分区了,这次我来详细说说分表的一些方法. 目前我所知道的方法都是MYISAM的,INNODB如何做分表并且保留事务和外键,我还不 ...

  2. MySQL分表(Partition)学习研究报告

    最近在开发一个新的项目,可能会产生大数据量,需要对部分表进行分表操作,故来研究学习MySQL的分表功能. 由于实验报告已经写成Exlce文件了,各位看过就直接下载吧:MySQL分表分析报告.xls 以 ...

  3. MySQL纯透明的分库分表技术还没有

    MySQL纯透明的分库分表技术还没有  种树人./oneproxy --proxy-address=:3307 --admin-username=admin --admin-password=D033 ...

  4. mysql分表和表分区详解

    为什么要分表和分区? 日常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表.这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下,如果涉及联合查询的情况,性能 ...

  5. 【mysql】mysql分表和表分区详解

    为什么要分表和分区? 日常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表.这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下,如果涉及联合查询的情况,性能 ...

  6. MySQL分表

    一.概念 1.为什么要分表和分区?日常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表.这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下,如果涉及联合查询 ...

  7. 浅谈MySQL分表

    关于分表:顾名思义就是一张数据量很大的表拆分成几个表分别进行存储. 我们先来大概了解以下一个数据库执行SQL的过程: 接收到SQL --> 放入SQL执行队列 --> 使用分析器分解SQL ...

  8. 【大数据和云计算技术社区】分库分表技术演进&最佳实践笔记

    1.需求背景 移动互联网时代,海量的用户每天产生海量的数量,这些海量数据远不是一张表能Hold住的.比如 用户表:支付宝8亿,微信10亿.CITIC对公140万,对私8700万. 订单表:美团每天几千 ...

  9. 总结下Mysql分表分库的策略及应用

    上月前面试某公司,对于mysql分表的思路,当时简要的说了下hash算法分表,以及discuz分表的思路,但是对于新增数据自增id存放的设计思想回答的不是很好(笔试+面试整个过程算是OK过了,因与个人 ...

随机推荐

  1. 我的Android第三章

    先看效果图. 点击之后出变成 按钮内容改变了,并且弹出一个小提示 下面我们就来看看如何实现这个小案例 1)先打开string.xml文件,把要定义的字符串资源放置在里面 2)然后我们要画页面,基本An ...

  2. webstorm运行到服务器(Apache)

    昨天百度了很多关于webstorm怎么运行到服务器当中的例子,但是我都阅读了一遍,里边貌似没有是关于Apache跟webstorm的配置方式.所以下面是我给大家分享我的亲身体验. 再次强调:这里用的8 ...

  3. 分析恶意windows程序

    1.windows 注册表 注册表根键 注册表被划分为下面5个根键 HKEY_LOCAL_MACHINE(HKLM) 保存对本地机器全局设置 HKEY_CURRENT_USER(HKCU) 保存当前用 ...

  4. libevent源码分析:eventop

    eventop:定义了event_base使用的后端IO复用的一个统一接口 /** Structure to define the backend of a given event_base. */ ...

  5. JAVA 多线程学习总结

    新手一枚,Java学习中,把自己学习多线程的知识总结一下,梳理下知识,方便日后查阅,高手莫进. 本文的主要内容: [1]    实现线程的两种方法                [2]  线程的启动与 ...

  6. Python -- 数据加载、存储与文件格式

    标签(空格分隔): Python 读入读出通常可以划分为几个大类:读取文本文件和其他更高效的磁盘存储格式,加载数据库中的数据,利用Web API操作网络资源. 读写文本格式的数据 pandas提供了一 ...

  7. dsp 28377在线升级 实例总结

    使用dsp品台28377d来实现在线升级的功能. 方案 : 升级程序  +  应用程序 升级程序 : 主要的目的是将上位机发送过来的应用程序数据(ccs编译生成的.bin文件)烧写到指定位置,之后在跳 ...

  8. 使用 CSS3 绘制 Hello Kitty

    偶然间看到了 SegmentFault 上的一篇文章,感觉这个 Hello Kitty 画的还不错,心血来潮也用 CSS3 画了个 Hello Kitty,现在在这里记录一下详细的绘制过程.想要源码. ...

  9. window.onload和window.onscroll

    之前我的一个页面里写了引入了2个js,一个是包含置顶的侧面客服,一个是定位导航.2个开始都用了window.onload,发现第一个js的定位导航没有显示,被第2个js覆盖了,当我去掉第2个js的wi ...

  10. PHP的基本排序算法

    1 冒泡排序 <?php /** * 冒泡排序(从小到大) * 基本思想:两两比较相邻记录,一次循环确定一个数 * 在所有的排序算法中是最慢的,尤其当数据量较大的时候,数据小体现不出来 */ $ ...