什么是数据库分区?数据库分区是一种物理数据库设计技术,DBA和数据库建模人员对其相当熟悉。虽然分区技术可以实现很多效果,但其主要目的是为了在特定的SQL操作中减少数据读写的总量以缩减响应时间。分区主要有两种形式://这里一定要注意行和列的概念(row是行,column是列)水平分区(Horizontal Partitioning) 这种形式分区是对表的行进行分区,通过这样的方式不同分组里面的物理列分割的数据集得以组合,从而进行个体分割(单分区)或集体分割(1个或多个分区)。所有在表中定义的列在每个数据集中都能找到,所以表的特性依然得以保持。举个简单例子:一个包含十年发票记录的表可以被分区为十个不同的分区,每个分区包含的是其中一年的记录。(朋奕注:这里具体使用的分区方式我们后面再说,可以先说一点,一定要通过某个属性列来分割,譬如这里使用的列就是年份)垂直分区(Vertical Partitioning) 这种分区方式一般来说是通过对表的垂直划分来减少目标表的宽度,使某些特定的列被划分到特定的分区,每个分区都包含了其中的列所对应的行。举个简单例子:一个包含了大text和BLOB列的表,这些text和BLOB列又不经常被访问,这时候就要把这些不经常使用的text和BLOB了划分到另一个分区,在保证它们数据相关性的同时还能提高访问速度。在数据库供应商开始在他们的数据库引擎中建立分区(主要是水平分区)时,DBA和建模者必须设计好表的物理分区结构,不要保存冗余的数据(不同表中同时都包含父表中的数据)或相互联结成一个逻辑父对象(通常是视图)。这种做法会使水平分区的大部分功能失效,有时候也会对垂直分区产生影响。
分区详细地址:http://dev.mysql.com/doc/refman/5.1/zh/partitioning.html我们不再多说.
初次测试结论:
range————————————-800万条数据测试————————————
range类型按时间分区无主键数据.
————————————-25万条数据测试————————————
range类型按user_id分区主键数据.
我们假设PARTITION BY RANGE (user_id)中user_id为”PARTITION关联的列”当数量两很大时,根据PARTITION关联的列查询多条记录,分区后效率提速90%左右但通过与 PARTITION关联的列 之外的列的查询 分区后效率低8%左右,模糊查询分区后效率低45%左右
数据越大,效果越明显,如果只有几百万的数据,分区和加了索引的效果差不多
posted on 2009-06-10 14:35 肥仔 阅读(453) 评论(0) 编辑 收藏 引用 所属分类: 数据库
Powered by: C++博客 Copyright © 肥仔