Mysql用存储过程分表

Mysql用存储过程分表,第1张

你这样拆分会建立无数张表,你不确定供应商ID有多少,也就意味着你不知道要建立多少张表,在查询的时候也需要判断哪个商品区哪个表查询,如果只有条码,或者商品名字怎么查询,效果可能得不偿失。

建议:1.如果是商品 字段却很长,表占用空间很大,检索表的时候需要执行大量的IO,严重降性能。这时需要把大的字段拆分到另一个表,并且该表与原表是一对一的关系。也就是把不常用的字段丢在另外一张表上去

2.如果数据量太多(我想哪怕大超市系统数据量也不会很多,建议采用1),可以根据条码或者名字拆分,已条码为例 条码为1的建立goods_one表

建表语句INSERT INTO goods_one(字段) SELECT 字段 FROM goodsWHERE 你的条件

如果你确实要执行你的想法

创建存储过程

CREATE PROCEDURE 。。。

begin

定义参数(游标)

查询所有供应商

游标遍历 更具供应商 查询goods表

创建表 插入数据

end

最好开启事务

能帮的就这么多了 望采纳

1.按时间分表

这种分表方式有一定的局限性,当数据有较强的实效性,如微博发送记录、微信消息记录等,这种数据很少有用户会查询几个月前的数据,如就可以按月分表。

2.按区间范围分表

一般在有严格的自增id需求上,如按照user_id水平分表:

table_1  user_id从1~100w 

table_2  user_id从101~200w 

table_3  user_id从201~300w 

... 

3.hash分表

通过一个原始目标的ID或者名称通过一定的hash算法计算出数据存储表的表名,然后访问相应的表。

按如下分10张表:

function get_hash_table($table, $userid)

{

$str = crc32($userid)

if ($str < 0) {

$hash = "0" . substr(abs($str), 0, 1)

} else {

$hash = substr($str, 0, 2)

}

return $table . "_" . $hash

}

echo get_hash_table('message', 'user18991') //结果为message_10

echo get_hash_table('message', 'user34523') //结果为message_13


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7239102.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-03
下一篇 2023-04-03

发表评论

登录后才能评论

评论列表(0条)

保存