啊呀~忙了好一段时间~数据库的优化说了好久~没精力去动一点点,今晚突然起兴致,学习一下这个mysql的分区功能,当然,搞这个的出发点跟某司没一毛钱关系~
这个学习笔记这里只做个简单归纳, 具体可参看mysql文档 http://dev.mysql.com/doc/refman/5.1/zh/partitioning.html
先来说说分区的一些优点:
1 与单个磁盘或文件系统分区相比,可以存储更多的数据。
2 对于那些已经失去保存意义的数据, 通常可以通过删除与那些数据有关的分区, 很容易地删除那些数据. 相反, 在某些情况下, 添加新数据的过程又可以通过为那些新数据专门增加一个新的分区, 来很方便地实现.
3 一些查询可以得到极大的优化, 这主要是借助于满足一个给定WHERE 语句的数据可以只保存在一个或多个分区内, 这样在查找时就不用查找其他剩余的分区. 因为分区可以在创建了分区表后进行修改, 所以在第一次配置分区方案时还不曾这么做时,可以重新组织数据, 来提高那些常用查询的效率.
4 涉及到例如SUM() 和 COUNT()这样聚合函数的查询,可以很容易地进行并行处理。这种查询的一个简单例子如 “SELECT salesperson_id, COUNT(orders) as order_total FROM sales GROUP BY salesperson_id;”. 通过“并行”, 这意味着该查询可以在每个分区上同时进行, 最终结果只需通过总计所有分区得到的结果.
5 通过跨多个磁盘来分散数据查询,来获得更大的查询吞吐量。
mysql5.1目前支持RANGE, HASH, LIST, KEY几种分区类型.
RANGE分区 : 基于属于一个给定连续不重叠区间的列值,把多行分配给分区. 也就是说把一个表按分区表达式划分为多个连续的区间, 分区内的行乎合该分区表达式的值给定的区间.
LIST分区 : LIST分区与RANGE分区很相似, 不过RANGE分区的定义和选择是从属于某个连续的区间值集中进行, 而LIST分区的定义和选择则是基于某列的值从属于一个值列表集(通常为数值集合)中的一个值.
HASH分区 : HASH分区主要用来确保数据在预先确定数目的分区中"平均分布". 在HASH分区中,不需要给定一个区间或列值集合, MySQL 自动完成这些工作,我们所要做的只是基于将要被哈希的列值指定一个列值(字段)或表达式, 以及指定被分区的表将要被分割成的分区数量.
KEY分区 : KEY分区类似于HASH分区, 它们的区别是HASH分区使用的用户定义的表达式,而KEY分区的哈希函数是由MySQL 服务器提供.