Mysql第八天 分割槽與分表

2021-07-03 23:11:28 字數 2688 閱讀 1004

主要提供如下的特性,或者適合如此場景:

通常有這麼幾種分法,因為主鍵或者是唯一約束鍵必須有一部分包含在分割槽鍵中,所以一般要不無主鍵,要不就按照自增主鍵的id進行範圍分割槽,要不就把分割槽欄位和主鍵一起作為聯合主鍵。

還有一些其他的限制,比如分割槽鍵的運算結果必須為整數

range分割槽

create

table biz_order(

id bigint(20) not

null auto_increment,

created datetime not

null comment '建立時間',

primary

key (id, created)) engine=innodb partition by range(year(created))(

partition p_2010 values less than (2015),

partition p_latest values less than maxvalue);

這種分割槽,最新的那個區顯然會有最多的熱點資料。 可以再使用hash子分割槽來減少競爭

- 除了使用year, to_day等日期函式外,還可以使用其數學函式,比如取模,按7取模是週幾等

list分割槽

是用in來做列值匹配的集合。 比如可以按照地區來分為東西南北幾個區:

partition by

list(store_id)

partition pnorth values in (3,5,6,9,17),

partition peast values in (1,2,10,11,19,20),

partition pwest values in (4,12,13,14,18),

partition pcentral values in (7,8,15,16)

);

這種如果插入語句不在in中,則會插入失敗

hash分割槽

partitions為分割槽的數量, 即會根據分割槽鍵的值計算出乙個hash值,然後以4為模進行儲存,好處是,不用再重新建分割槽了。

partition by hash(store_id)

partitions 4;

還有key分割槽,用的太少,不說了

增加刪除分割槽等語句看這裡

分割槽表由多個底層表構成,底層表跟普通表沒什麼區別,其索引也是分別在各個表中的索引。 分割槽表只是會在乙個很粗的粒度上決定一下去哪個底層表繼續查詢。

使用分割槽表肯定是因為資料量非常大,這個時候索引已經不能很好的起作用了。

可以不使用索引,而用粗粒度的命中分割槽表,然後全表掃瞄。

或者是針對熱點資料,單獨使用乙個區讓這個區都能夠放到快取中,這樣就會有乙個熱點的很小的分割槽,可以對其使用索引。

另外一些可能的問題:

要在where後面帶分割槽列,且不能是表示式

使用explain partitions select來判斷是否進行了分割槽過濾

分割槽表還是一張表,是一種邏輯上的實現,主要解決的是單錶資料過大,索引效率低的問題,很適合大量歷史資料,少量活躍資料的場景。把資料儲存在不同的區域。

分表是真的有多張表,基於分表還可以做分庫,可以提公升併發效能,以及磁碟i/o的效能。

二者可以配合使用。

要配合複製使用,僅僅是把查詢請求進行了分攤。

但是這樣不會影響**層。

可乙個根據使用者id來分,每個使用者一張表,這樣需要每有新的使用者都建表了。

還有常用的做法是預先設計好比如100張表,然後對資料的乙個欄位做hash,然後對100取模。

又或者根據時間來進行分割,這種的好處是,如果根據時間做統計的時候可以不用union

上面的分表方式都不能解決根據伺服器壓力進行選擇的問你,並且也不能比較均勻的儲存資料。

分表之後要考慮這樣幾個操作以後可能會帶來的問題:

基本表:

create

table test_merge_1(

id int(5) not

null,

value

varchar(100) not

null,

primary

key(id)

);create

table test_merge_2(

id int(5) not

null,

value

varchar(100) not

null,

primary

key(id)

);merge表:

create

table test_merge(

id int(5) not

null,

value

varchar(100) not

null,

primary

key(id)

) type=mrg_myisam insert_method=last

union=(test_merge_1,test_merge_2);

基本表必須是myisam型別的。

基本表的資料結構必須一致。

order by等語句,我想的是因為merge表裡有基本表共同的索引,所以,排序的時候應該是,都先比較第乙個,然後再。。。有點像常用的大檔案分成多個小檔案,然後分別排序,最後merge的過程。

主要是能夠提供比較好的編碼介面。

開課第八天

開課第八天,今天因為遲到問題被老師訓了,呵呵,說實話是真的感覺前一周有點懶散鬆懈,今天被訓之後又感覺到了緊迫感,嗯,堅持就是勝利,加油。上午講題,下午講新知識,以下就是本寶寶吸收的新養料 方法 可以被稱作函式,也可以被稱作功能。1 main 是我們學習的第乙個簡單的方法,public static ...

彙編第八天

彙編形式目標 main proc push ebp mov ebp,esp 建立堆疊框架 push offset msg 匯入引數位址 call printf 呼叫函式 xor eax,eax 返回0 pop epb 扯掉框架 ret 0 返回主程式 main endp 結束 1.條件語句 cmp ...

前端第八天

迴圈繫結的變數汙染 在進行事件迴圈變數繫結時,由於函式體內部 並未執行,在繫結結束後,呼叫函式時,賦予的部分變數失去意義,解決方案 給頁面元素新增乙個任意屬性 事件與已有的函式進行繫結 只需要將函式位址繫結給事件,事件繫結完成將會有系統在特定情況下自動觸發 物件 字典 的增刪改查 物件元素格式為字串...