mysql 横切_mysql分区

★针对海量数据的优化主要有两种方法

(1)大表拆成小表

垂直分表(竖切)---主键在每个分表中都会出现

水平分表(横切)---字段一般稳定,而记录不稳定

水平分表技术是将一个表拆分成多个表,比较常用的方式是将表中的记录按照某种Hash算法进行拆分,简单的拆分方法如取模方式。同样,这种分区方法也必须对前端的应用程序中的SQL进行修改方可使用。而且对于一个SQL,它可能会修改两个表,那么必须得写成2个SQL语句从而可以完成一个逻辑事务,使得程序的逻辑判断越来越复杂,这也会导致程序的维护代价增高,也就失去了采用数据库的优势。因此,分区技术可以有利地避免如上的弊端,成为解决海量数据的有利方法

(2)SQL语句的优化

可以通过增加索引等来调整,但是数据量的增大同时也会导致索引的维护代价增大

★mysql分区技术不同于之前的分表技术,它与水平分表有些类似,但是它是在逻辑层进行的水平分表,对于应用程序而言它还是一张表RANGE分区:基于属于一个给定的连续区间的列值,把多行分配给分区

PARTITION BY RANGE(store_id)(

PARTITION p0 VALUES LESS THAN(6),    编号1-5的店铺存放在p0分区(< 6)

PARTITION p1 VALUES LESS THAN(11),   编号6-10的店铺存放在p1分区

PARTITION p2 VALUES LESS THAN(16),   编号11-15的店铺存放在p2分区

PARTITION p3 VALUES LESS THAN(21),   编号16-20的店铺存放在p3分区

)

LIST分区:类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值进行选择

PARTITION BY LIST(store_id)

(

PARTITION pNorth VALUES IN(3,5,6,9,17),

PARTITION pEast VALUES IN(1,2,10,11,19,20),

PARTITION pWest VALUES IN(4,12,13,14,18),

PARTITION pCentral VALUES IN(7,8,15,16),

)

HASH分区:基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算,这个函数可以包含mysql中有效的、产生非负整数值的任何表达式(平均分配到每个分区,但可能分区与分区之间的数据没有规律)

PARTITION BY HASH(YEAR(hired))

PARTITIONS 4

;

KEY分区:类似于按HASH分区,区别在于KEY分区只支持计算一列或多列,并且mysql服务器提供其自身的HASH函数

★不同分区技术的对比

分区类型                 优点                      缺点                      共性

RANGE         适合日期类型支持复合分区        有限的分区             一般只针对某一列

LIST       适合有固定取值的列支持复合分区   有限的分区,插入         一般只针对某一列

记录在这一列的值不在

LIST中,则数据丢失

HASH       线性HASH使得增加、删除和合并分   线性Hash的数据分布不     一般只针对某一列

区更快捷                         均匀而一般Hash数据分

布较均匀

KEY        列可以为字符型等其他非Int类型    效率较之前的低,因为     一般只针对某一列

函数为复杂的函数

(如.MD5或SHA函数)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值