背景:資料庫使用過程中,乙個合適型別的表,會提高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...