文章彙整

提升MySQL大數據效能(Partition)

By Astral Web 2 years agoNo Comments
首頁  /  網站設計與開發  /  提升MySQL大數據效能(Partition)

Mysql 03隨著使用的時間、資料庫的資料會日漸提升,慢慢的效能就會變的很差,所以我們要將大數據的資料表做分割,讓每一個資料表變的小一些、去提升資料庫的查尋效率。

 

目前分割資料有分二種方式,一種是水平分割(Horizontal Partitioning)、另一種是垂直分割(Vertical Partitioning)

 

水平分割(Horizontal Partitioning)

透過資料量做分割,舉個例子,如果現在會員資料有1千萬筆,我們可以透過會員生日的月份資料進行拆分,可以把資切成12個資料表依照會員的生日。

 

垂直分割(Vertical Partitioning)

透過欄位做分割,如果你資料表有30個欄位,可能有20個欄位比較少被搜尋,我們就可以將那20個欄位切出去獨立一張資料表。

 

分割模式:(參考資料:http://twpug.net/docs/mysql-5.1/partitioning.html#partitioning-list)

 

 

  • Range

 

       按照RANGE分區的資料表是通過如下一種方式進行分區的,每個分區包含那些分區資 料表達式的值位於一個給定的連續區間內的行。這些區間要連續且不能相互重疊,使用 VALUES LESS THAN操作符來進行定義。

 

 

  • Hash

 

       HASH分區主要用來確保數據在預先確定數目的分區中平均分佈。在RANGELIST分區中,必須明確指定一個給定的列值或列值集合應該保存在哪個分區中;而在HASH分區中,MySQL 自動完成這些工作,您所要做的只是基於將要被哈希的列值指定一個列值或資料表達式,以及指定被分區的資料表將要被分割成的分區數量。

 

 

  • Key

 

      按照KEY進行分區類似於按照HASH分區,除了HASH分區使用的用戶定義的資料表達式,而KEY分區的 哈希函數是由MySQL 伺服器提供。

 

 

  • List

 

       MySQL中的LIST分區在很多方面類似於RANGE分區。和按照RANGE分區一樣,每個分區必須明確定義。它們的主要區別在於,LIST分區中每個分區的定義和選擇是基於某列的值從屬於一個值列資料表集中的一個值,而RANGE分區是從屬於一個連續區間值的集合。LIST分區通過使用「PARTITION BY LIST(expr)」來實現,其中「expr 是某列值或一個基於某個列值、並返回一個整數值的資料表達式,然後通過「VALUES IN (value_list)」的方式來定義每個分區,其中「value_list」是一個通過逗號分隔的整數列資料表。

 

更細的資料可以參考Mysql官方網站:http://dev.mysql.com/doc/refman/5.7/en/partitioning-overview.html

 

Sample – 水平分割(Range)

 

  1. 目前有一個tablea01,然後想透過建立資料的時間去切割資料,另外我們把這個table copy出來取名叫a02來做對照組

Mysql 04

  1. 二個table資料都是1340103

Mysql 05

Mysql02

  1. a01是有切割partition,花的時間是 1.1sec

 

  1. a02是沒切割partition,執行相同的指令跟相同的資料量、花的時間是2.8

Mysql 01

 

 

結論:  iMysql 00

    在數據快速成長下的資料表,應該是要切partition,但切的時後、也要想清楚是要用什麼條件當成分割點,如果常用到的搜尋資料是跨好幾個partition的話、會變的一點用處都沒有,所以這個是要看當時的狀況跟需求去處理的。

 

以上內容由Astralweb 歐斯瑞編寫製作

 000

推薦文章

Category:
  網站設計與開發

留下回應

你的電子郵件地址不會被公開.

取得獨家電子商務祕技

建立更好的策略靈感

跟上全球的網路趨勢

絕佳的電商解決方案

電子商務戰略全指南

每月發送電商戰略指南,只要填寫E-mail即可訂閱!

請到您的信箱確認,即可完成訂閱。