mysql15--垂直分表水平分表

?分表技术(表的结构不能变)
分表技术有(水平分割和垂直分割)

当一张越来越大时候,即使添加索引还慢的话,我们可以使用分表
以qq用户表来具体的说明一下分表的操作.
思路如图 :
首先我创建三张表 user0 / user1 /user2 , 然后我再创建 uuid表,该表的作用就是提供自增的id,   插入的时候插入到不同的表中去。
走代码:
create table user0(
id int unsigned primary key ,
name varchar(32) not null default ‘‘,
pwd  varchar(32) not null default ‘‘)
engine=myisam charset utf8;

create table user1(
id int unsigned primary key ,
name varchar(32) not null default ‘‘,
pwd  varchar(32) not null default ‘‘)
engine=myisam charset utf8;

create table user2(
id int unsigned primary key ,
name varchar(32) not null default ‘‘,
pwd  varchar(32) not null default ‘‘)
engine=myisam charset utf8;

create table uuid(
id int unsigned primary key auto_increment)engine=myisam charset utf8;

n 垂直分割,把列拆分到不同的表。示意图:

一句话: 如果一张表某个字段,信息量大,但是我们很少查询,则可以考虑把这些字段,单独的放入到一张表中,这种方式称为垂直分割.

数据库只存储路径。图片和文件存放在文件系统,甚至单独放在一台服务器(图床 / 视频服务器 ). 数据库是可以存视频的。

mysql.ini:
port = 3306  端口是可以改的。
max_connections=200 ,mysql是中型数据库,2000并发数是极限。但是做好缓存之后可以支持10万没问题。也可以做读写分离集群。
query_cache_size=15M,查询缓存的大小。

innodb引擎,所以下面两个参数调的很大
innodb_additional_mem_pool_size = 64M
innodb_buffer_pool_size =1G       //缓存池
对于myisam,需要调整key_buffer_size
当然调整参数还是要看状态,用show status语句可以看到当前状态,以决定改调整哪些参数

如果你的机器内存超过4G,那么毋庸置疑应当采用64位操作系统和64位mysql 5.5.19,位越大是寻址范围越大,

  

原文地址:https://www.cnblogs.com/yaowen/p/8250718.html

时间: 2024-10-04 13:49:13

mysql15--垂直分表水平分表的相关文章

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

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`

MySQL常见水平分表技术方案

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

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

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

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

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

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'; $use

SqlServer 垂直分表

当单表数据太多时.我们能够水平划分,參考 SqlServer 分区视图实现水平分表 ,水平划分能够提高表的一些性能. 而 垂直分表 则相对非常少见到和用到,由于这可能是数据库设计上的问题了.假设数据库中一张表有部分字段差点儿从不不更改但常常查询,而部分字段的数据频繁更改.这样的设计放到同一个表中就不合理了,相互影响太大了.在已存在改情况的表的时候,能够考虑按列拆分表,即垂直拆分. 由于垂直分表的案例比較少,近期由于存在这种表,所以个人捣鼓了一下. 源表设计结构: -- 源表 CREATE TAB

CSS3/HTML5实现漂亮的分步骤注册登录表单

分步骤的登录注册表单现在也比较多,主要是能提高用户体验,用户可以有选择性的填写相应的表单信息,不至于让用户看到一堆表单望而却步.今天和大家分享的就是一款基于HTML5和CSS3的分步骤注册登录表单,外观不用说,非常漂亮.你看一下DEMO就知道了. 这里是在线演示,你可以先看看效果. 接下来我们要来一起看看实现的过程是怎样的.代码有点复杂,主要由HTML代码.CSS3代码以及Javascript代码组成. HTML代码: <form id="msform"> <!--