设为首页 加入收藏

TOP

MySQL分区表使用方法
2019-01-25 12:09:06 】 浏览:86
Tags:MySQL 分区表 使用方法

命令:



customer_login_log 表如果不分区,在物理磁盘上文件为


如果按上面的建HASH分区表,则有五个文件





使用起来和不分区是一样的,看起来只有一个数据库,其实有多个分区文件,比如我们要插入一条数据,不需要指定分区,MySQL会自动帮我们处理



查询




如果没有定义p3分区,当插入的customer_id大于29999时会报错,定义了则超过的数据都存入p3中



如果插入一条login_type为10的数据行,则会报错


按年份分区存储,所以用YEAR函数进行了转化


插入并查询数据




再插入2条18年的日志,会存入p2表中



之前说过建立分区表时,最好建立一个MAXVALUE的分区,这里之所以没有建立,是为了数据维护的方便,如果我们建立了MAXVALUE分区,很容易忽视一个问题,当我们2019年有的数据插入时,会自动存入那个MAXVALUE分区中,之后在做数据维护时会不方便,所以没有建立MAXVALUE分区
而是通过计划任务的方式,在每年年底的时候增加这个分区,比如我们现在在2018年年底,我们需要在日志表中为2019年建立日志分区,否则2019年的日志都会插入失败



我们可以通过下面语句


增加分区,并插入数据



假如我们现在要删除2016年到2017年间一年的数据,因为我们已经做了分区,所以只需要通过一条语句,删除p0分区即可



可以发现p0分区已被删除,且2016年的日志全部被清除了


我们可能有另一种需求对数据进行归档


Mysql版本>=5.7,归档分区历史数据非常方便,提供了一个交换分区的方法





可以发现,原customer_login_log表中的2017年的数据(p1分区中的数据)已转移到了arch_customer_login_log表中,但是p1分区未删除,只是数据转移了,所以我们还需要执行DROP命令删除分区,以免有数据插入其中


最后我们将归档数据的存储引擎改为归档引擎,命令为


使用归档引擎的好处是:它比Innodb所占用的空间更少,但是归档引擎只能进行查询操作,不能进行写操作


1.关于自动增长


myisam引擎的自动增长列必须是索引,如果是组合索引,自动增长可以不是第一列,他可以根据前面几列进行排序后递增。


innodb引擎的自动增长咧必须是索引,如果是组合索引也必须是组合索引的第一列。


2.关于主键


myisam允许没有任何索引和主键的表存在,


myisam的索引都是保存行的地址。


innodb引擎如果没有设定主键或者非空唯一索引,就会自动生成一个6字节的主键(用户不可见)


innodb的数据是主索引的一部分,附加索引保存的是主索引的值。


3.关于count()函数


myisam保存有表的总行数,如果select count(*) from table;会直接取出出该值


innodb没有保存表的总行数,如果使用select count(*) from table;就会遍历整个表,消耗相当大,但是在加了wehre 条件后,myisam和innodb处理的方式都一样。


4.全文索引


myisam支持 FULLTEXT类型的全文索引


innodb不支持FULLTEXT类型的全文索引,但是innodb可以使用sphinx插件支持全文索引,并且效果更好。(sphinx 是一个开源软件,提供多种语言的API接口,可以优化mysql的各种查询)


5.delete from table


使用这条命令时,innodb不会从新建立表,而是一条一条的删除数据,在innodb上如果要清空保存有大量数据的表,最 好不要使用这个命令。(推荐使用truncate table,不过需要用户有drop此表的权限)


6.索引保存位置


myisam的索引以表名+.MYI文件分别保存。


innodb的索引和数据一起保存在表空间里。



编程开发网
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇MySQL执行计划分析 下一篇Orace 12.2 ORA-12012: error on ..