gbase裡的分布表與複製表

2021-08-21 07:54:44 字數 1566 閱讀 5576

背景:資料庫使用過程中,乙個合適型別的表,會提高sql執行的效率,也可以合理利用伺服器空間。

一.分布表

分布表可以使資料按指定的策略分布儲存在不同的主機上,從而實現分布式資料儲存和分布式計算,解決大資料儲存容量擴充套件和

計算效能擴充套件的問題。

分布策略:採用hash分布、random分布策略儲存資料

預設建立的表是隨機分布表,每個節點上只保留部分表資料。

隨機分布表如下:

create table table1(a int , b varchar(10));

hash分布表如下:

create table student

(no varchar(10),

name varchar(200),    

*** int)

distributed by('no');

選取distributed by列字段的原則

1.在多表join查詢時,表中某列經常用於join等值關聯;

2.表中該列通常是等值查詢的列,並且使用的頻率很高;

3.選取表中重複值較少的列,盡量讓資料均勻分布。

4.選擇count(distinct)值大的列做hash分布列

注意:被選為distributed by列欄位,有如下限制說明

1.distributed by當前只支援varchar、int兩種資料型別。

2.distributed by列的值,不允許進行更新操作(update)。

3.distributed by列不允許設定 default 值。

建議:除複製表外,其他表都要建成hash分布表

hash列的要求:空字元不能過多、字段值不能重複太多、盡量選用作為查詢條件較多的字段。

二.複製表

複製表將會存在於各個節點上,即表的名字和資料完全一致。需要使用

replicated

關鍵字來建立複製表。一般來說,小表比如配置表、字典表等資料量小(10w以下)可以被建立成複製表。一些表頻繁參不join查詢表也可以被建立成複製表。

如:create table table1( 「col」  type ) 

engine=express

replicated

default charset=utf8 

注意事項:

拷貝表,目標表預設為隨機分布表,該方式建立的table1沒有hash分布列,即使table22有hash分布列

create tabletable1 as select * from table22;

拷貝表,目標表為任意型別可在表名後指定型別

create table table1 distributed by ('fx') as select * from table22 limit 0;

create tabletable1 replicated as select * from table22 limit 0;

拷貝表,目標表型別與源表一致

create tabletable1 like table22;

個人觀點,歡迎指正。

表與表之間的關係,修改表,複製表

外來鍵就是從來幫助我們建立表與表之間關係的 foreign key表與表只有四種關係 一對多關係 多對多關係 一對一關係 多對一關係sql語句建立表關係 1.一對多表關係 外來鍵字段建在多的一方 2.在建立表的時候 一定要先建被關聯表 3.在錄入資料的時候 也必須先錄入被關聯表 create tab...

mysql 拷貝表(複製表)的幾種方式

1.下面這個語句會拷貝表結構到新錶newadmin中。不會拷貝表中的資料 create table newadmin like admin 2.下面這個語句會拷貝資料到新錶中。注意 這個語句其實只是把select語句的結果建乙個表。所以newadmin這個表不會有主鍵,索引。3.如果你要真正的複製乙...

Mysql複製表結構 表資料的方法

1 複製表結構及資料到新錶 create table 新錶select from 舊表 這種方法會將oldtable中所有的內容都拷貝過來,當然我們可以用delete from newtable 來刪除。不過這種方法的乙個最不好的地方就是新錶中沒有了舊表的primary key extra auto...