資料庫水平分表

2022-06-25 21:54:12 字數 2202 閱讀 1280

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兩個庫中。...