MySQL 分割槽表舉例

2021-08-28 01:56:21 字數 2356 閱讀 7297

range型別

須要提供乙個數字列作為判斷依據

alter table log_regist partition by range (unix_timestamp(

event_at))(

partition p201702 values less than (1485878400) engine = innodb,

partition p201703 values less than (1488297600) engine = innodb,

partition p201704 values less than (1490976000) engine = innodb,

partition p201705 values less than (1493568000) engine = innodb,

partition p201706 values less than (1496246400) engine = innodb )

注意紅字必須是線性值,數字、時間戳都成(date需要使用 to_days(date)這種形式,5.5以後支援),核心思想就是比較指定列是否在某個區間(分割槽)內。問題就是分割槽隨著時間推移會不斷增加,所以一定要及時增加新的分割槽否則無法寫入資料。另外,參照列必須列為復合主鍵(比如 primary key (`id`,`create_at`) )。

hash型別

利用hash函式獲取某列的hash值,然後提供乙個正數的分割槽數量。

alter table log_order_finished partition by hash(id) partitions 12;

list型別

list型別必須明確指定範圍值,其不同於range對連續的序列進行判斷

假定有20個音像店,分布在4個有經銷權的地區,如下表所示: 地區

商店id 號

北區3, 5, 6, 9, 17

東區1, 2, 10, 11, 19, 20

西區4, 12, 13, 14, 18

中心區7, 8, 15, 16

要按照屬於同乙個地區商店的行儲存在同乙個分割槽中的方式來分割表,可以使用下面的「create table」語句:

create table employees (

id int not null,

fname varchar(30),

lname varchar(30),

hired date not null default '1970-01-01',

separated date not null default '9999-12-31',

job_code int,

store_id int )

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) );

這段照搬了手冊,我不用這種分割槽方式的理由是不可約定列的內容範圍。

key型別

它們唯一的區別在於使用的關鍵字是key而不是hash,並且key分割槽只採用乙個或多個列名的乙個列表

通過線性key分割乙個表也是可能的。下面是乙個簡單的例子:

create table tk (

col1 int not null,

col2 char(5),

col3 date )

partition by linear key (col1)

partitions 3;

這段很詭異,手冊上說明了是基於mysql內部的hash方法,類似於password()函式。

刪除分割槽

alter table tr drop partition p2;

增加分割槽

alter table members add partition (partition p3 values less than (1960));

for ($i = 1; $i <= 36; $i++)

function makepartition()

echo '(', join(',', $partitions), ')';

}

此段是我常用於生成日誌sql的**,僅供參考。

吐槽一句,這個編輯器越來越爛了

MySQL分割槽表

分割槽表是一種粗粒度,簡易的索引策略,適用於大資料的過濾場景.最適合的場景是,沒有合適的索引時,對其中幾個分割槽表進行全表掃瞄.或者只有乙個分割槽表和索引是熱點,而且這個分割槽和索引能夠全部儲存在記憶體中.限制單錶分割槽數不要超過150個,並且注意某些導致無法做分割槽過濾的細節,分割槽表對於單條記錄...

mysql分割槽表

對使用者來說,分割槽表是乙個獨立的邏輯表,但是底層由多個物理子表組成。實現分割槽的 實際上是對一組底層表的控制代碼物件的封裝。mysql在建立表時使用partition by子句定義每個分割槽存放的資料。在執行查詢的時候,優化器會根據分割槽定義過濾那些沒有我們需要資料的分割槽,這樣查詢就無須掃瞄所有...

mysql分割槽表 MySQL分割槽表的正確使用方法

mysql分割槽表概述 我們經常遇到一張表裡面儲存了上億甚至過十億的記錄,這些表裡面儲存了大量的歷史記錄。對於這些歷史資料的清理是乙個非常頭疼事情,由於所有的資料都乙個普通的表裡。所以只能是啟用乙個或多個帶where條件的delete語句去刪除 一般where條件是時間 這對資料庫的造成了很大壓力。...