mysql分區技術


基本概念

把一個表,從邏輯上分成多個區域,便於存儲數據。

采用分區的前提,數據量非常大。

如果數據表的記錄非常多,比如達到上億條,數據表的活性就大大降低,數據表的運行速度就比較慢、效率低下,影響mysql數據庫的整體性能,就可以采用分區解決

分區是mysql本身就支持的技術

 

分區算法

list分區

list :條件值為一個數據區。

算法根據“字段的內容值”是否在某個“區域”中進行分區,通過預定義的列表的值來對數據進行分割。

語法

利用表選項:partition 完成。

create table  table_name(

       字段信息,

       索引,

) charset utf8

partition by list(分區字段)(

    partition list_name1 values in (),

    partition list_name2 values in()

);

例子:創建一張表,該表保存有全國20家分公司的職員記錄,這20家分公司的編號從1到20.而這20家分公司分布在全國4個區域,如下表所示:

id  name   store_id(分公司的id)

北部    1,4,5,6,17,18

南部    2,7,9,10,11,13

東部    3,12,19,20

西部    8,14,15,16

查看執行計划

 

注意:where后面的字段必須是分區字段

 

range分區

定義:利用“字段值”取值范圍將數據分區,區間要連續並且不可以重疊,使用VALUES LESS THAN 進行分區定義

less than   小於等於

MAXVALUE  可能的最大值 

例子:用戶余額表

create table p_range(
id int(11) NOT NULL,
name varchar(32) NOT NULL,
totle_money int(11) NOT NULL
)
partition by range (totle_money)(
          partition p1 values less than (100),
          partition p2 values less than(1000),
          partition p3 values less than(10000),
          partition p4 values less than MAXVALUE
);

注意

1,上面分區語句的VALUES LESS THAN MAXVALUE子句是表示當有大於10000的時候都插入到p4中,MAXVALUE代表最大可能整數值,否則當我們插入一條記錄包含10001時會報錯。

2,順序是有規定的,當把p1設為1000而p2設為100時會報錯。

3,無論是哪一種分區類型,如果表里有主鍵,則分區字段必須是主鍵或者主鍵的一部分,否則會報錯。

 A PRIMARY KEY must include all columns in the table's partitioning function

 如果添加主鍵   alter table p_range add PRIMARY key(id,totle_money)

文件存儲信息

 

增加分區

range/list 增加分區

alter table table_name add  partition(

           partition 分區名 values less than (常量)

           

           partition 分區名 in (n,n,n)

 );

刪除分區

給 range/list 刪除分區

alter table table_name drop partition 分區名稱;

注意:刪除的分區里的數據會被刪除。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM