1. 前言:但資料庫資料到達千萬級別的時候,查詢如果不按索引查就會非常慢,於是這裡打算利用水平分表來優化一下查詢,提高效率
2. 分表:取我當前表的某一列的前兩個數字進行二級分表,將千萬資料化分成十萬。
--首先執行迴圈建表:create procedure sum1(a
int)
begin
declare sum
intdefault 0; -- default
是指定該變數的預設值
declare i
intdefault 0; --迴圈下標
while i<=a do --迴圈開始
set i=i+1;
set @sql_create_table =concat(
'create table if not exists tbcid_0', i,
"(`keycid` varchar(32) not null,
`mcc` varchar(3) not null,
`mnc` varchar(2) not null,
`lac` varchar(12) not null,
`cid` varchar(12) not null,
`country` varchar(32) not null,
`province` varchar(32) null default null,
`city` varchar(32) null default null,
`district` varchar(32) null default null,
`road` varchar(64) null default null,
`street` varchar(64) null default null,
`pos` varchar(64) null default null,
`detailpos` varchar(256) null default null,
`longitude` varchar(32) null default null,
`latitude` varchar(32) null default null,
`idxareaid` varchar(128) null default null,
`remark` varchar(256) null default null,
`mdftm` datetime(0) not null,
`mdfby` varchar(45) not null,
`crttm` datetime(0) not null,
`crtby` varchar(45) not null,
`idxownerid` varchar(128) null default null,
primary key (`keycid`) using btree,
index `idxareaid`(`idxareaid`) using btree,
index `idxownerid`(`idxownerid`) using btree
)engine=innodb default charset=utf8;");
prepare sql_create_table from @sql_create_table;
execute sql_create_table;
end
while; --迴圈結束
--可加迴圈結束後操作語句
end--第二步執行
--執行儲存過程
call sum1(100);
--第三步執行
--刪除儲存過程
drop procedure
if exists sum1;
3. 資料遷移
--查詢個表資料條數use information_schema;
select table_name,table_rows from tables
where table_schema = '資料庫名'and table_name like "表名%"order by
table_rows desc;
4. 查詢修改
-- 未完待續
資料庫水平分表(hash演算法)
這種預估大差不差的,論壇裡面發表帖子的表,時間長了這張表肯定很大,幾十萬,幾百萬都有可能。聊天室裡面資訊表,幾十個人在一起一聊乙個晚上,時間長了,這張表的資料肯定很大。像這樣的情況很多。所以這種能預估出來的大資料量表,我們就事先分出個n個表,這個n是多少,根據實際情況而定。以聊天資訊表為例 我事先建...
Mysql水平分表
mysql水平分表 mysql在資料量大的情況下,會遇到水平分表的情況。1 條件中含有分表的資訊 比如說要劃分10個表,那對10進行取模。其實也可以是任意雜湊函式,但是要注意注意衝突處理。2 根據時間拆表 當表的關係比較複雜時,無法根據某個維度進行分表。但是有明顯的時效性。想必大家都用微薄,某人發的...
mycat 水平分表
相對於垂直拆分的區別是 垂直拆分是把不同的表拆到不同的資料庫中,而水平拆分是把同乙個表拆到不同的資料庫中。水平拆分不是將表的資料做分類,而是按照某個欄位的某種規則來分散到多個庫之中,每個表中包含一部分資料。例如,分庫中的舉例,orders表水平分到order win和order linux兩個庫中。...