码迷,mamicode.com
首页 > 数据库 > 详细

mysql分区

时间:2015-04-11 20:59:49      阅读:207      评论:0      收藏:0      [点我收藏+]

标签: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函数) 


mysql分区

标签:mysql   分区   

原文地址:http://caoyue.blog.51cto.com/9876038/1631289

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!