在mysql 5.1.3之後引入和partition(分割槽)的概念。這個是個好東東。以前遇到乙個大表的時候,我們會手動將其分為幾個小表(就是分表操作)。但是分表操作有幾個缺點:1 麻煩,這裡指的麻煩是不僅對於呼叫分表的sql語句的處理上,也是分表的具體操作步驟上。2 當乙個表從單錶變為分表的時候,上層sql邏輯也需要進行修改,而且是大範圍的修改!
引入分割槽的概念就簡單多了。強調一點,乙個表分割槽了,它還是乙個表!乙個表分表了,它就不是乙個表了!這實際上是個會讓你不得不使用分割槽的理由,當你對乙個表分割槽的時候,上層的**邏輯是不用變的。
分割槽就是乙個表分割在不同的磁碟檔案中。
你可以使用mysql> show variables like '%partition%'; 確定mysql是否支援partition
比如使用場景是論壇的文章表,論壇的文章最經常進行的查詢也不過就是在最近幾個月的論壇文章中進行操作。所以這樣的文章內容使用時間進行分割槽是最好不過的了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
create table article (
article_id int not null auto_increment,
article_content varchar(1000),
article_time
date
not null default
'1970-01-01'
,
key(article_id)
)
engine=innodb
partition by range (year(article_time)) (
partition p0 values less than (1991),
partition p1 values less than (1996),
partition p2 values less than (2001),
partition p3 values less than maxvalue
) ;
上面的語句就是按照年份將文章分為4個分割槽
直接拿官網的乙個sql語句做例子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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)
);
hash partition: 按照表中任意個int型別的字段進行分割
create table part_table (
id int not null auto_increment,
name varchar(30),
store_id int,
key(id)
)
engine=innodb
partition by hash(store_id)
partitions 4;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
create table part_table2 (
id int not null auto_increment primary key,
name varchar(30),
store_id int
)
engine=innodb
partition by key()
partitions 4;
恰當的分割槽當然比單錶是好多的,不僅利於管理,也利於提高查詢效率。分割槽由於代價非常小,所以在一般的使用上應該先考慮使用它。但是它也不是****,分割槽說到底還是在乙個mysql上進行的操作,如果資料量達到一定程度,還是會需要分庫分表來進行操作的。
MySQL分割槽技術
mysql分割槽技術是mysql5.1以後出現的新技術,能替代分庫分表技術,它的優勢在於只在物理層面來降低資料庫壓力。常用的mysql分割槽型別 1.range分割槽 基於屬於乙個給定的連續區間的列值,把多行分配給分割槽 基於列 2.list分割槽 類似於按range分割槽,區別在於list分割槽是...
mysql分割槽技術
把乙個表,從邏輯上分成多個區域,便於儲存資料。採用分割槽的前提,資料量非常大。如果資料表的記錄非常多,比如達到上億條,資料表的活性就大大降低,資料表的執行速度就比較慢 效率低下,影響mysql資料庫的整體效能,就可以採用分割槽解決 分割槽是mysql本身就支援的技術 list 條件值為乙個資料區。演...
Mysql 分割槽技術一理論
一 基本理論 在mysql大資料處理上,水平分表技術是很常用的,但是分表技術帶來了php處理的很大開銷,為了解決這個弊端mysql5.1以後以外掛程式的方式增加了乙個新的技術 分割槽技術。分割槽技術是在邏輯層進行的水平分表,對於應用程式而言還是一張表,mysql5.1有4種分割槽型別 1 range...