(最近在学习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. SQL 对时间的处理

    --获取当前日期(如:yyyy-mm-dd)Select Datename(year,GetDate())+'-'+Datename(month,GetDate())+'-'+Datename(day ...

  2. bzoj1007[HNOI2008]水平可见直线

    cycleke神说要用半平面交(其实他也用的凸包),把我吓了一跳,后来发现(看题解)其实可以先按斜率排序,再将最小的两条线入栈,如果其与栈顶元素的交点在上一个点的左边,则将栈顶元素出栈.这是一个开口向 ...

  3. Organize Your Train part II-POJ3007模拟

    Organize Your Train part II Time Limit: 1000MS Memory Limit: 65536K Description RJ Freight, a Japane ...

  4. centos7 yum 方式安装nginx

    centos7系统库中默认是没有nginx的rpm包的,所以我们自己需要先更新下rpm依赖库 (1)使用yum安装nginx需要包括Nginx的库,安装Nginx的库 #rpm -Uvh http:/ ...

  5. 一个简单的loading,纯属自娱自乐

    /// <reference path="/scripts/js/jquery.min.js" /> var zsw = { loading: function (im ...

  6. Web String path问题

    request.getContextPath()"下方出现了红色的波浪线,提示的错误信息是 "The method getContextPath() from the type H ...

  7. python操作Excel--使用xlrd

    一.安装xlrd http://pypi.python.org/pypi/xlrd 二.使用介绍 1.导入模块 import xlrd 2.打开Excel文件读取数据 data = xlrd.open ...

  8. sql语句错误

    此错误一般有以下情况造成: 1.配置文件中SQL语句写的有问题 2.传参过程中没有找到sql对应的参数 解决方法: 1.检查sql语句 2.debug启动,查找与sql语句相对应的参数是否存在. 3. ...

  9. Javascript学习笔记:3种定义函数的方式

    ①使用函数声明语法定义函数 function sum(num1,num2){ return num1+num2; } ②使用函数表达式定义函数 var sum=function(num1,num2){ ...

  10. Hibernate学习笔记(一)

    2016/4/18 19:58:58 Hibernate学习笔记(一) 1.Hibernate框架的概述: 就是一个持久层的ORM框架. ORM:对象关系映射.将Java中实体对象与关系型数据库中表建 ...