数据库越来越大,单个表中数据过多,查询读写,还有锁机制,会导致严重的数据库性能影响.
表锁,行锁,都是为了保证数据的完整性,
分表
分表是把一个大表,分成若干个独立储存空间的表,每个表都对应MYD数据文件,MYI索引文件,FRM表结构文件,这些表可以分布在一个存储设备,也可以分在不同存储设备.
相当于一个表变为多个表,如果这时候有APP已经在使用中,而且会对原表进行操作等等,需要开发修改代码,因为原来的一个表已经分成好几个,按照原来的表肯定是搜索不到的.
将单表拆分,再根据一定算法,就可以将数据分散到多个表中,对数据量大的数据库,会有明显的提升,
减少数据库负担,缩短查询时间,这是分表的主要目的
mysql分表-分为垂直切分,和水平切分.
垂直切分是按照列切分,水平就是行切分(需求不同自行挑选)
垂直切分
一般垂直切分都是把经常查询的列单独分到一张表中,方便查询
水平拆分
表的数据非常庞大,可以分成多个表,提高查询效率
--------------------------------------------------------------------------------------------------------
分表的几种方式
1-mysql集群
这个不是分表但是也是相同的作用,任务分担到多台mysql数据库
2-预先估计表的访问量,提前分为若干表,以防万一
根据一定算法,将数据分散到不同表中.
3-利用merge存储引擎来分表
merge只能用在myisam上进行分表.
merge分为主表跟子表,主表中是子表的位置,如果使用myisam来分表的话APP可以不需要修改连接数据的信息,还是可以直接从主表中查询.
做一个merge的实例
create database gao;
use gao;
create table gao(
id bigint auto_increment primary key,
name varchar(20),
sex tinyint not null default ‘0‘)
engine=myisam default charset=utf8 auto_increment=1;
批量加入数据
insert into gao(name,sex) values(‘gao‘,1);
insert into gao(name,sex)select name,sex from gao; 将查询到的数据插入,所以,数据都一样只是测验用
开始进行分表,首先创建两个子表
use gao;
drop table if exists gao_1;
create table gao_1(
id bingint primary key,
name varchar(20)
sex tinyint not null default ‘0‘)
engine=myisam default charset=utf8;
因为第二个表跟上面的一模一样除了名字
create table gao_2 like gao_1;
创建主表
drop table if exists mastergao;
create table mastergao(
id bigint primary key auto_increment ,
name varchar(20),
sex tinyint not null default ‘0‘)
engine=mergeunion=(gao_1,gao_2) insert_method=last charset=utf8 auto_increment=1;
insert_method = last 表示茶如道最后一张表 first 表示插入到第一张表
数据导入到两个子表当中.
insert into gao_1(id,name,sex) select id,name,sex from gao where id%2=1;
insert into gao_2(id,name,sex) select id,name,sex from gao where id%2=0;
id%2后的值单双导入到两个表中
这时候查询两个表跟主表,数据都有了就可以删除原来的gao将mastergao更改为gao即可.
alter table mastergao rename gao;完成
--------------------------------------------------------------------------------------------------------------
centos7-mysql-分表
时间: 2024-10-10 22:09:19
centos7-mysql-分表的相关文章
mysql分表方法-----MRG_MyISAM引擎分表法
一般来说,当我们的数据库的数据超过了100w记录的时候就应该考虑分表或者分区了,这次我来详细说说分表的一些方法.目前我所知道的方法都是MYISAM的,INNODB如何做分表并且保留事务和外键,我还不是很了解. 首先,我们需要想好到底分多少个表,前提当然是满足应用.这里我使用了一个比较简单的分表方法,就是根据自增id的尾数来分,也就是说分0-9一共10个表,其取值也很好做,就是对10进行取模.另外,还可以根据某一字段的md5值取其中几位进行分表,这样的话,可以分的表就很多了. 好了,先来创建表吧,
mysql 分表与分区
一.操作环境 数据达到百w甚于更多的时候,我们的mysql查询将会变得比较慢, 如果再加上连表查询,程序可能会卡死.即使你设置了索引并在查询中使用到了索引,查询还是会慢.这时候你就要考虑怎么样来提高查询速度了. 抛弃其他的不讲,只从mysql本身的优化来讲,我所知道的方法有三种:mysql集群,mysql分表,mysql分区 二.mysql集群 mysql集群成本比较高,不过这不是这里讲的重点,后期开一篇文章,专门来讲这方面的知识. 三.mysql分表 1. 当数据达到百w,千w的时候,我们就想
mysql分表和表分区详解
为什么要分表和分区? 日常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表.这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下,如果涉及联合查询的情况,性能会更加糟糕.分表和表分区的目的就是减少数据库的负担,提高数据库的效率,通常点来讲就是提高表的增删改查效率. 什么是分表? 分表是将一个大表按照一定的规则分解成多张具有独立存储空间的实体表,我们可以称为子表,每个表都对应三个文件,MYD数据文件,.MYI索引文件,.frm表结构文件.这些子表可以分布在
MYSQL 分表原理(转)
简介:引用MySQL官方文档中的一段话:MERGE存储引擎,也被认识为MRG_MyISAM引擎,是一个相同的可以被当作一个来用的MyISAM表的集合."相同"意味着所有表同样的列和索引信息.你不能合并列被以不同顺序列于其中的表,没有恰好同样列的表,或有不同顺序索引的表.而且,任何或者所有的表可以用myisampack来压缩.例子:mysql> show engines;+--------------------+---------+------------------------
mysql分表的三种方法
mysql分表的3种方法 一,先说一下为什么要分表 当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了.分表的目的就在于此,减小数据库的负担,缩短查询时间. 根据个人经验,mysql执行一个sql的过程如下:1,接收到sql;2,把sql放到排队队列中 ;3,执行sql;4,返回执行结果.在这个执行过程中最花时间在什么地方呢?第一,是排队等待的时间,第二,sql的执行时间.其实这二个是一回事,等待的同时,肯定有sql在执行.所以我们要缩短sql的执行
mysql分表研究
分表是分散数据库压力的好方法. 分表,最直白的意思,就是将一个表结构分为多个表,然后,可以再同一个库里,也可以放到不同的库. 当然,首先要知道什么情况下,才需要分表.个人觉得 单表记录条数达到百万到千万级别时就要使用分表了. 1,分表的分类 1>纵向分表 将本来可以在同一个表的内容,人为划分为多个表.(所谓的本来,是指按照关系型数据库的第三范式要求,是应该在同一个表的.) 分表理由:根据数据的活跃度进行分离,(因为不同活跃的数据,处理方式是不同的) 案例: 对于一个博客系统,文章标题,作者,分类
使用Merge存储引擎实现MySQL分表
一.使用场景 Merge表有点类似于视图.使用Merge存储引擎实现MySQL分表,这种方法比较适合那些没有事先考虑分表,随着数据的增多,已经出现了数据查询慢的情况. 这个时候如果要把已有的大数据量表分开比较痛苦,最痛苦的事就是改代码.所以使用Merge存储引擎实现MySQL分表可以避免改代码. Merge引擎下每一张表只有一个MRG文件.MRG里面存放着分表的关系,以及插入数据的方式.它就像是一个外壳,或者是连接池,数据存放在分表里面. 对于增删改查,直接操作总表即可. 二.建表 1.用户1表
mysql分表场景分析与简单分表操作
为什么要分表 首先要知道什么情况下,才需要分表个人觉得单表记录条数达到百万到千万级别时就要使用分表了,分表的目的就在于此,减小数据库的负担,缩短查询时间. 表分割有两种方式: 1水平分割:根据一列或多列数据的值把数据行放到两个独立的表中. 水平分割通常在下面的情况下使用: 表很大,分割后可以降低在查询时需要读的数据和索引的页数,同时也降低了索引的层数,提高查询速度. 表中的数据本来就有独立性,例如表中分别记录各个地区的数据或不同时期的数据,特别是有些数据常用,而另外一些数据不常用. 需要把数据存
一、mysql分表简单介绍
一.Mysql分表的原因 1.当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了. 分表的目的就在于此,减小数据库的负担,缩短查询时间. 2.mysql中有一种机制是表锁定和行锁定,为什么要出现这种机制,是为了保证数据的完整性, 我举个例子来说吧,如果有二个sql都要修改同一张表的同一条数据,这个时候怎么办呢,是不是二个sql都可以同时修改这条数据呢? 很显然mysql对这种情况的处理是,一种是表锁定(myisam存储引擎),一个是行锁定(innod
mysql分表规则(转)
author:skatetime:2013/05/14 Mysql分表准则 在大量使用mysql时,数据量大.高访问时,为了提高性能需要分表处理,简介下mysql分表的标准,后续会继续补充 环境:业务类型:OLTP硬件:cpu:8cpu 2.4GHZmem:48G磁盘:raid5 6×sas 什么样的表需要拆分:根据表的体积.表的行数.访问特点来衡量表是否需要拆分 一.拆分标准是: 1.表的体积大于2G或行数大于1000w,以单表主键等简单形式访问数据,这个时候需要分表 2.表的体积大于2G