Mysql 数据库水平分表 存储过程
生活随笔
收集整理的這篇文章主要介紹了
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,然后
如此這般。
總結
以上是生活随笔為你收集整理的Mysql 数据库水平分表 存储过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql建库语句on报错_mysql运
- 下一篇: 安卓 sqlite数据存入mysql_在