我們大家都知道MySQL數據庫分區屬於一種物理的數據庫相關設計技術,DBA與MySQL數據庫相關人員對其可以說是相當的熟悉。雖然實現分區技術有很多種,但其主要目的是為了在特定的SQL操作中減少數據讀寫的總量以縮減響應時間。
分區主要有兩種形式:
這裡一定要注意行和列的概念row是行,column是列)
1. 水平分區Horizontal Partitioning)這種形式分區是對表的行進行MySQL數據庫分區,通過這樣的方式不同分組裡面的物理列分割的數據集得以組合,從而進行個體分割單分區)或集體分割1個或多個分區)。所有在表中定義的列在每個數據集中都能找到,所以表的特性依然得以保持。
舉個簡單例子:一個包含十年發票記錄的表可以被分區為十個不同的分區,每個分區包含的是其中一年的記錄。朋奕注:這裡具體使用的分區方式我們後面再說,可以先說一點,一定要通過某個屬性列來分割,譬如這裡使用的列就是年份)
2. 垂直分區Vertical Partitioning) 這種分區方式一般來說是通過對表的垂直劃分來減少目標表的寬度,使某些特定的列 被劃分到特定的分區,每個分區都包含了其中的列所對應的行。
舉個簡單例子:一個包含了大text和BLOB列的表,這些text和BLOB列又不經常被訪問,這時候就要把這些不經常使用的text和BLOB了劃分到另一個分區,在保證它們數據相關性的同時還能提高訪問速度。
在數據庫供應商開始在他們的數據庫引擎中建立MySQL數據庫分區主要是水平分區)時,DBA和建模者必須設計好表的物理分區結構,不要保存冗余的數據不同表中同時都包含父表中的數據)或相互聯結成一個邏輯父對象通常是視圖)。這種做法會使水平分區的大部分功能失效,有時候也會對垂直分區產生影響
分區的一些優點包括:
與單個磁盤或文件系統分區相比,可以存儲更多的數據。
對於那些已經失去保存意義的數據,通常可以通過刪除與那些數據有關的分區,很容易地刪除那些數據。相反地,在某些情況下,添加新數據的過程又可以通過為那些新數據專門增加一個新的分區,來很方便地實現。
通常和分區有關的其他優點包括下面列出的這些。MySQL數據庫分區中的這些功能目前還沒有實現,但是在我們的優先級列表中,具有高的優先級;我們希望在5.1的生產版本中,能包括這些功能。
一些查詢可以得到極大的優化,這主要是借助於滿足一個給定WHERE 語句的數據可以只保存在一個或多個分區內,這樣在查找時就不用查找其他剩余的分區。因為分區可以在創建了分區表後進行修改,所以在第一次配置分區方案時還不曾這麼做時,可以重新組織數據,來提高那些常用查詢的效率。
涉及到例如SUM() 和 COUNT()這樣聚合函數的查詢,可以很容易地進行並行處理。這種查詢的一個簡單例子如 “SELECT salesperson_id, COUNT(orders) as order_total FROM sales GROUP BY salesperson_id;”。通過“並行”, 這意味著該查詢可以在每個MySQL數據庫分區上同時進行,最終結果只需通過總計所有分區得到的結果。
通過跨多個磁盤來分散數據查詢,來獲得更大的查詢吞吐量。