采用mysql分区技术_MySQL分区技术 (一)

4:MySQL 分区技术(是mysql 5.1以版本号后開始用->是甲骨文mysql技术团队维护人员以插件形式插入到mysql里面的技术)

眼下,针对海量数据的优化主要有2中方法:

1:大表拆成小表的方式(物理上)

一:垂直分表->一张垂直切成几张

二:水平分表(一般重点)->横切。意思就是一张表有100个数据横切10张表,一张表存10条(字段一致)

2:SQL语句的优化(能够通过添加索引等来调整。可是数据量大的增大会导致索引的维护代价增大)

水平分区技术将一个表拆成多个表,比較经常使用的方式是将表中的记录依照某种hash算法进行拆分,简单的拆分方法如取摸

方式。相同。这样的分区方法也必须对前端的应用程序中的SQL进行改动方能够使用。并且对于一个SQL,它可能会改动两个

表,那么你必须地写出2个SQL语句从而能够完毕一个逻辑事务。使得程序的推断逻辑越来越复杂,这样也导致程序的维护代价

高,也就失去了採用数据库的优势。

*因此:分区技术能够有力地避免如上的弊端。成为解决海量数据存储的有力方法。

分区技术:

->>有效攻克了:物理上拆分多个表。逻辑上操作一个表表明不变

->>MySQL分区技术介绍(*主要用的是range 和 list 分区*):

-----分区在逻辑上是一张表,在硬件/物理上是多张表,就是拆分表索引和数据-----

MySQL的分区技术不同与之前的分表技术,它与水平分表有点相似,可是它在逻辑层进行的水平分表。

对与应用程序而言它还是一张表。

MySQL5.1版本号后有4中分区类型:

一:RANGE分区(用的最多):基于属于一个给定连续区间的列值(字段),把多行分配给分区 -->基于女字段为參考点来进行分区

--将一个表拆分成:索引文件,数据文件分片存储

二:LIST分区:相似于按range分区。差别在于list分区是基于列值匹配一个离散值集合中的某个值来进行选择(列里面的值是固定值时候来进行分区,并且是枚举类型的值适合用list分区 -->比方说 性别:男。女)

三:HASH分区:基于用户定义的表达式的返回值来进行选择的分区。改表达式使用将要插入到表中的这些行的

列值计算。这个函数能够包括MySQL中有效的、产生负整数值的不论什么表达式

--->把每次插入的数据随机的平均的分配到多个分区里面。终于多个分区里面的数据时平均分配的。可是每一个分区里面的数值肯能不太一样,由于是随机分配的(一般能够用来做MySQL分区的測试来使用)

四:KEY分区:相似于按hash分区。差别在于key分区仅仅支持计算一列或多列,且MySQLserver提供其自身的哈希函数

測试一下(測试用hash类型的):->myisam增删改查的速度快

create table t2(id int)engine=myisam

partition by hash(id)

partitions 5; ->能后当你插入数据的时候就会随机分配插入个个分区中

建立一个存储

d // ->改动结束符号 之前是;号改成 //

create procedure p5()

begin

set @i=1;

while @i<100000 do

insert into t4 values(@i);

set @i=@i+1;

end while;

end //

运行刚才建立的存储

call p3() ->表p3就插入了9999条数据

innodb的数据结构:

分为:共享表空间及其独占表空间

一:innodb表结构共享表空间不能做成分区表:

全部文件的数据和索引都在ibddata1(比方你建了2个表会相应生成frm文件,可是2个表的全部数据和索引全部在这个文件中面共用,全部不能对表做正真的分区,初始值是10M)

原因:数据和索引全都是放在一个文件中面 .ibddata1文件

二:innodb表结构要想做出分区表必须是“独占表空间”

原因:数据和索引全都是独立的一个文件

开启独占空间:(*必须配置文件中开启文件才干做出独占表空间,才干做成分区表*)

innodb_data_home_dir = C:mysqldata

innodb_data_file_path = ibdata1:10M:autoextend

innodb_log_group_home_dir = C:mysqldata

innodb_file_per_table=1 ->配置文件中innodb下方加上

重新启动:MySQL -->pkill mysqld 关闭进程 又一次启动MySQL-bin/mysqld_safe --user=mysql &

測试:

create table t4(id int)engine=innodb

partition by RANGE(id)(

partition p0 values less than(10000),

partition p1 values less than(20000),

PARTITION p2 VALUES less than MAXVALUE);

能后你在创建innodb类型的数据表后。你会发现建一个x表就有x.frm x.ibd文件,就不会和其它表放到一起从而做表分区

*重点总结:仅仅有把innodb设置成独立的表空间后,才干创建innodb表引擎的表分区

相关命令:

/s; 查看具体信息版本号啊编码啊 什么的。

。。

show engines; 查看默认表引擎

show plugins; 查看当前MySQL的全部插件,能够查看是否支持分区partition

show index from from tabName; 查看索引

show procedure status; 查看简历的存储

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值