mysql数据库对1亿条数据的分表方法设计:
目前针对海量数据的优化有两种方法:
(1)垂直分割
优势:降低高并发情况下,对于表的锁定。
不足:对于单表来说,随着数据库的记录增多,读写压力将进一步增大。
(2)水平分割
如果单表的IO压力大,可以考虑用水平分割,其原理就是通过hash算法,将一张表分为N多页,并通过一个新的表(总表),记录着每个页的的位置。
假如一个门户网站,它的数据库表已经达到了1亿条记录,那么此时如果通过select去查询,必定会效率低下(不做索引的前提下)。为了降低单表的读写IO压力,通过水平分割,将这个表分成10个页,同时生成一个总表,记录各个页的信息,那么假如我查询一条id=100的记录,它不再需要全表扫描,而是通过总表找到该记录在哪个对应的页上,然后再去相应的页做检索,这样就降低了IO压力。
你这样拆分会建立无数张表,你不确定供应商ID有多少,也就意味着你不知道要建立多少张表,在查询的时候也需要判断哪个商品区哪个表查询,如果只有条码,或者商品名字怎么查询,效果可能得不偿失。建议:1.如果是商品 字段却很长,表占用空间很大,检索表的时候需要执行大量的IO,严重降性能。这时需要把大的字段拆分到另一个表,并且该表与原表是一对一的关系。也就是把不常用的字段丢在另外一张表上去
2.如果数据量太多(我想哪怕大超市系统数据量也不会很多,建议采用1),可以根据条码或者名字拆分,已条码为例 条码为1的建立goods_one表
建表语句INSERT INTO goods_one(字段) SELECT 字段 FROM goodsWHERE 你的条件
如果你确实要执行你的想法
创建存储过程
CREATE PROCEDURE 。。。
begin
定义参数(游标)
查询所有供应商
游标遍历 更具供应商 查询goods表
创建表 插入数据
end
最好开启事务
能帮的就这么多了 望采纳
横向分表:例如将创建时间在05年之前的数据放在一个分区上,将05年到08年之间的数据放到另一个分区上,以此类推。到底要根据那个列进行横向的分区和查询有关系,在建表的时候需要分析,会根据那个列进行查询。
思路这样,具体事情具体分析。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)