mysql分區

mysql分區方案:Range分區(Columns Range分區)、List分區(Columns List分區)、Hash分區(Linear Hash分區)、Key分區(Linear Key分區)。

一、Range分區:

1、當表有主鍵/unique key時,分區字段必須包含在主鍵/unique key內;

2、Range分區,只有一個分區字段,分區範圍必須是連續的,而不能是重疊的;

3、Range分區條件可以是一個字段,也可以是一個函數表達式,但是表達式越複雜,分區效率就越低;

4、Range分區字段(或者表達式返回值)必須是Integer類型,如果分區字段是 TIMESTAMP類型,則必須使用 UNIX_TIMESTAMP() 函數。

5、下面情況有一個爲真都比較適合使用Range分區:

        a、需要刪除大量舊數據;b、您希望使用包含日期或時間值的列,或者包含來自其他系列的值。c、您經常運行直接依賴於用於分區表的列的查詢。

 

二、Range分區與Columns Range分區的區別:

1、Columns Range分區只接受列分區,不接受表達式;

2、Columns Range分區可以接受一個或者多個字段分區;

3、Columns Range分區的分區字段可以是Integer、String、Date、DateTime類型。

 

三、List分區與Columns List分區的區別:

1、List分區只有一個分區字段,而Columns List可以有一個以上的分區字段;

2、List分區字段的類型必須是Integer類型,而Linear List分區字段類型可以是Integer、String、DATE、DATETIME類型;

3、當表有主鍵/unique key時,分區字段必須包含在主鍵/unique key內;

 

四、Hash分區:

1、當表有主鍵/unique key時,分區字段必須包含在主鍵/unique key內;

2、Hash分區的分區字段必須是Integer類型,或者分區表達式的返回值是Integer類型;

3、當使用函數分區時,要注意如果使用計算複雜的表達式會導致插入、更新數據的效率很低,特別是批量插入的情況;

4、hash值變化的頻率越高,mysql使用該表達式進行分區的效率越好;

 

五、Hash分區與Range分區、List分區的區別:

1、Hash分區的特點是保證預定的分區數量之間均勻分佈數據;

2、Range、List分區必須顯示指定數據存放到哪個分區,而Hash分區,mysql自動幫你完成,你只需要指定分區字段(或者分區表達式)和設置分區數量就行;

 

六、Hash分區與Linear Hash分區的區別:

1、分區的算法不同,Hash分區使用的是hash函數算法,Linear Hash分區使用的是2的線性冪算法;

2、使用線性散列進行分區的優點是,分區的添加、刪除、合併和分割速度更快,這在處理包含大量(tb)數據的表時非常有用。缺點是,與使用常規散列分區獲得的分佈相比,數據不太可能均勻地分佈在分區之間。

 

七、Key分區與Hash分區的區別:

1、key分區與hash分區類似,不同之處在於Hash分區需要自己定義hash算法進行分區,而Mysql提供了默認的hash算法給key分區;

2、key只接受包含0個或多個列名的列表。用作分區鍵的任何列必須包含表的部分或全部主鍵(如果表有主鍵的話)。如果沒有指定列名作爲分區鍵,則使用表的主鍵(如果有的話);

3、key分區的分區字段不侷限於Integer類型或者null值。

 

八、Key分區與Linear Key分區的區別:

與Hash分區和Linear Hash分區一樣,只是分區的算法不同。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章