1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Mysql 数据库水平分表 存储过程

Mysql 数据库水平分表 存储过程

时间:2021-04-16 03:48:48

相关推荐

Mysql 数据库水平分表 存储过程

数据库存储量达到一定程度的时候,就需要进行分表以减轻检索的消耗。

常用的分表方式包括水平和垂直分表。本次进行的是按照uid进行水平分表。

##分表思路: 水平分表平均的将数据按照特定方式分配到多个表中。理论上每个表的访问频次和数据量都是同一水平的。

水平分表有很多种划分方式。在这里使用的是最简单的一种:按照id求余进行划分。

比如现在要将table分成100张表,需要创建一百张新表table_1,table_2等。然后根据uid%100的余数,来分配到对应的表中。

在程序中调用,也只需要按照同样的规则对uid求余,然后利用字符串拼接自动生成对应的表名,查询不同的表即可。

##代码实现:

虽然是第一次写存储过程,但是确实十分简单:

CREATE DEFINER=`root`@`localhost` PROCEDURE `divide_table_by_mod`(tableName varchar(64), target int)BEGINdeclare ntname varchar(64);declare i int;set i=0;while (i<target) doset @newTname = concat(tableName,"_",i);set @createSql = concat("create table ",@newTname," like ",tableName);set @insertSql = concat("insert into ",@newTname," select * from ",tableName," where uid%",target,"=",i);prepare dcsql from @createSql;execute dcsql;deallocate prepare dcsql;prepare disql from @insertSql;execute disql;deallocate prepare disql;set i = i+1;end while;END复制代码

##遇到问题:

字符串链接: 在mysql的存储过程中,字符串拼接需要使用concat函数,这个函数可以接收多个输入最终拼接成一个字符串。动态sql 动态的sql不能直接将变量写到sql里面来执行。需要先拼接一个sql,然后

prepare dcsql from @createSql;execute dcsql;deallocate prepare dcsql;复制代码

如此这般。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。