mysql 分表策略

mysql单表数据量巨大时,查询性能会很差,经常遇到的是存储日志相关的数据会每天产生大量的数据。

 

这里提供单表拆分成多表存储的三个思路:

一,固定N张表,ID取模存储

预先创建好N张表,记录按ID取模存储到相应的表中。

优点:简单粗暴

缺点:

受ID模式,预先创建好表的数量,不易扩展和改动。

按ID查询方便,但按时间查询就比较麻烦。

数据量大时迁移会影响性能。

 

例如:表test 拆分到100张表中

INSERT INTO test{$i} SELECT * FROM test WHERE id%100={$i}

 

二,按日期分类

insert into test_YYYYMM (field1,field2....) SELECT field1,field2....FROM test WHERE filed3 >= "YYYYMMDD" and filed3 <= "YYYYMMDD+1";  

优点:按时间好分类统计。

缺点:特定ID查询不方便,数据量大时迁移会影响性能。

 

三,rename 重命名方式

先复制test 表的结构创建一个临时表:
CREATE TABLE test_tmp LIKE test

RENAME TABLE test TO test_yyyyMM,test_tmp TO test;

在RENAME期间表是被锁死的,所以不用担心rename时数据丢失!

注意,按月份存储,则每月1号定时执行。

当然也可以变换拆分的方式,自由发挥了!

优点:快捷,无需数据导入导出。

 

posted @ 2015-10-07 17:07  itank  阅读(1064)  评论(0编辑  收藏  举报