创建mysql表分区的方法.doc_第1页
创建mysql表分区的方法.doc_第2页
创建mysql表分区的方法.doc_第3页
创建mysql表分区的方法.doc_第4页
创建mysql表分区的方法.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

创建mysql表分区的方法我来给大家介绍一下mysql表分区创建与使用吧,希望对各位同学会有所帮助。表分区的测试使用,主要内容来自于其他博客文章以及mysql5.1的参考手册。表分区是最近才知道的哦 ,以前自己做都是分表来实现上亿级别的数据了,下面我来给大家介绍一下mysql表分区创建与使用吧,希望对各位同学会有所帮助。表分区的测试使用,主要内容来自于其他博客文章以及mysql5.1的参考手册mysql测试版本:mysql5.5.28mysql物理存储文件(有mysql配置的datadir决定存储路径)格式简介数据库engine为MYISAMfrm表结构文件,myd表数据文件,myi表索引文件。INNODB engine对应的表物理存储文件innodb的数据库的物理文件结构为:.frm文件.ibd文件和.ibdata文件:这两种文件都是存放innodb数据的文件,之所以用两种文件来存放innodb的数据,是因为innodb的数据存储方式能够通过配置来决定是使用共享表空间存放存储数据,还是用独享表空间存放存储数据。独享表空间存储方式使用.ibd文件,并且每个表一个ibd文件共享表空间存储方式使用.ibdata文件,所有表共同使用一个ibdata文件创建分区分区的一些优点包括: 与单个磁盘或文件系统分区相比,可以存储更多的数据。 对于那些已经失去保存意义的数据,通常可以通过删除与那些数据有关的分区,很容易地删除那些数据。相反地,在某些情况下,添加新数据的过程又可以通过为那些新数据专门增加一个新的分区,来很方便地实现。通常和分区有关的其他优点包括下面列出的这些。MySQL 分区中的这些功能目前还没有实现,但是在我们的优先级列表中,具有高的优先级;我们希望在5.1的生产版本中,能包括这些功能。 一些查询可以得到极大的优化,这主要是借助于满足一个给定WHERE 语句的数据可以只保存在一个或多个分区内,这样在查找时就不用查找其他剩余的分区。因为分区可以在创建了分区表后进行修改,所以在第一次配置分区方案时还不曾这么做时,可以重新组织数据,来提高那些常用查询的效率。 涉及到例如SUM() 和 COUNT()这样聚合函数的查询,可以很容易地进行并行处理。这种查询的一个简单例子如 “SELECT salesperson_id, COUNT(orders) as order_total FROM sales GROUP BY salesperson_id;”。通过“并行”, 这意味着该查询可以在每个分区上同时进行,最终结果只需通过总计所有分区得到的结果。 通过跨多个磁盘来分散数据查询,来获得更大的查询吞吐量。简而言之就是 数据管理优化,查询更快,数据查询并行检测mysql是否支持分区复制代码代码如下:mysql show variables like%partition%;+-+-+| Variable_name | Value |+-+-+| have_partitioning | YES |+-+-+1 row in setRANGE 分区:基于属于一个给定连续区间的列值,把多行分配给分区。复制代码代码如下:DROP TABLE IF EXISTS p_range;CREATE TABLE p_range (id int(10) NOT NULL AUTO_INCREMENT,name char(20) NOT NULL,PRIMARY KEY (id) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=utf8/*!50100 PARTITION BY RANGE (id)(PARTITION p0 VALUES LESS THAN (8) ENGINE = MyISAM) */;range分区就是 partition by range(id) 表示按id 1-7的数据存储在p0分区;如果id大于7了则数据不能写入了,因为没有对应的数据分区来存储;所以这时在创建分区时需要使用maxvalues关键字了复制代码代码如下:PARTITION BY RANGE (id)(PARTITION p0 VALUES LESS THAN (8),PARTITION p1 VALUES LESS THAN MAXVALUE)这样就表示,所有id大于7的数据记录存在在p1分区里。RANGE分区在如下场合特别有用: 当需要删除“旧的”数据时。如果你使用上面最近的那个例子给出的分区方案,你只需简单地使用 “ALTER TABLE employees DROP PARTITION p0;”来删除所有在1991年前就已经停止工作的雇员相对应的所有行。对于有大量行的表,这比运行一个如“DELETE FROM employees WHERE YEAR(separated) ALTER TABLE clients COALESCE PARTITION 18;错误1478 (HY000): 不能移动所有分区,使用DROP TABLE代替要增加顾客表的分区数量从12到18,使用“ALTER TABLE ADD PARTITION”,具体如下:ALTER TABLE clients ADD PARTITION PARTITIONS 18;注释:“ALTER TABLE REORGANIZE PARTITION”不能用于按照HASH或HASH分区的表。分区维护重建分区这和先删除保存在分区中的所有记录,然后重新插入它们,具有同样的效果。它可用于整理分区碎片。ALTER TABLE t1 REBUILD PARTITION (p0, p1);优化分区如果从分区中删除了大量的行,或者对一个带有可变长度的行(也就是说,有VARCHAR,BLOB,或TEXT类型的列)作了许多修改,可以使用“ALTER TABLE OPTIMIZE PARTITION”来收回没有使用的空间,并整理分区数据文件的碎片。ALTER TABLE t1 OPTIMIZE PARTITION (p0, p1);分析分区读取并保存分区的键分布ALTER TABLE t1 ANALYZE PARTITION (p3);修补分区: 修补被破坏的分区。ALTER TABLE t1 REPAIR PARTITION (p0,p1);检查分区可以使用几乎与对非分区表使用CHECK TABLE 相同的方式检查分区。ALTER TABLE trb3 CHECK PARTITION (p1);这个命令可以告诉你表t1的分区p1中的数据或索引是否已经被破坏。如果发生了这种情况,使用“ALTER TABLE . REPAIR PARTITION”来修补该分区。获取分区信息在mysql服务器信息数据库里面的partitions存放着服务器所有表的分区信息。复制代码代码如下:explain partitions命令explain partitions select * from p_hash+-+-+-+-+-+-+-+-+-+-+-+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | Extra |+-+-+-+-+-+-+-+-+-+-+-+| 1 | SIMPLE | p_hash | p0,p1,p2,p3 | ALL | NULL | NULL | NUL

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论