共計 2158 個字符,預計需要花費 6 分鐘才能閱讀完成。
如何通過 Partition 分區提升 MySQL 性能,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面丸趣 TV 小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
什么是分區?
數據庫分區是一種物理技術,DBA 和數據庫建模人員對其相當熟悉。雖然分區技術可以實現很多效果,但其主要目的是為了在特定的 SQL 操作中減少數據讀寫的總量以縮減響應時間。
分區主要有兩種形式:// 這里一定要注意行和列的概念(row 是行,column 是列)
1. 水平分區 (Horizontal Partitioning) 這種形式分區是對表的行進行分區,通過這樣的方式不同分組里面的物理列分割的數據集得以組合,從而進行個體分割 (單分區) 或集體分割(1 個或多個分區)。所有在表中定義的列在每個數據集中都能找到,所以表的特性依然得以保持。
舉個簡單例子:一個包含十年發票記錄的表可以被分區為十個不同的分區,每個分區包含的是其中一年的記錄。(朋奕注:這里具體使用的分區方式我們后面再說,可以先說一點,一定要通過某個屬性列來分割,譬如這里使用的列就是年份)
2. 垂直分區(Vertical Partitioning) 這種分區方式一般來說是通過對表的垂直劃分來減少目標表的寬度,使某些特定的列 被劃分到特定的分區,每個分區都包含了其中的列所對應的行。
舉個簡單例子:一個包含了大 text 和 BLOB 列的表,這些 text 和 BLOB 列又不經常被訪問,這時候就要把這些不經常使用的 text 和 BLOB 了劃分到另一個分區,在保證它們數據相關性的同時還能提高訪問速度。
在數據庫供應商開始在他們的數據庫引擎中建立分區 (主要是水平分區) 時,DBA 和建模者必須設計好表的物理分區結構,不要保存冗余的數據 (不同表中同時都包含父表中的數據) 或相互聯結成一個邏輯父對象(通常是視圖)。這種做法會使水平分區的大部分功能失效,有時候也會對垂直分區產生影響。
在 MySQL 5.1 中進行分區
MySQL5.1 中最激動人心的新特性應該就是對水平分區的支持了。這對 MySQL 的使用者來說確實是個好消息,而且她已經支持分區大部分模式:
Range(范圍) ndash; 這種模式允許 DBA 將數據劃分不同范圍。例如 DBA 可以將一個表通過年份劃分成三個分區,80 年代 (1980 rsquo;s) 的數據,90 年代 (1990 rsquo;s) 的數據以及任何在 2000 年 (包括 2000 年) 后的數據。
Hash(哈希) ndash; 這中模式允許 DBA 通過對表的一個或多個列的 Hash Key 進行計算,最后通過這個 Hash 碼不同數值對應的數據區域進行分區,。例如 DBA 可以建立一個對表主鍵進行分區的表。
Key(鍵值) ndash; 上面 Hash 模式的一種延伸,這里的 Hash Key 是 MySQL 系統產生的。
List(預定義列表) ndash; 這種模式允許系統通過 DBA 定義的列表的值所對應的行數據進行分割。例如:DBA 建立了一個橫跨三個分區的表,分別根據 2004 年 2005 年和 2006 年值所對應的數據。
Composite(復合模式) – 很神秘吧,哈哈,其實是以上模式的組合使用而已,就不解釋了。舉例:在初始化已經進行了 Range 范圍分區的表上,我們可以對其中一個分區再進行 hash 哈希分區。
分區帶來的好處太多太多了,有多少? 俺也不知道,自己猜去吧,要是覺得沒有多少就別用,反正俺也不求你用。不過在這里俺強調兩點好處:
性能的提升 (Increased performance) – 在掃描操作中,如果 MySQL 的優化器知道哪個分區中才包含特定查詢中需要的數據,它就能直接去掃描那些分區的數據,而不用浪費很多時間掃描不需要的地方了。需要舉個例子? 好啊,百萬行的表劃分為 10 個分區,每個分區就包含十萬行數據,那么查詢分區需要的時間僅僅是全表掃描的十分之一了,很明顯的對比。同時對十萬行的表建立索引的速度也會比百萬行的快得多得多。如果你能把這些分區建立在不同的磁盤上,這時候的 I / O 讀寫速度就“不堪設想”(沒用錯詞,真的太快了,理論上 100 倍的速度提升啊,這是多么快的響應速度啊,所以有點不堪設想了) 了。
對數據管理的簡化(Simplified data management) – 分區技術可以讓 DBA 對數據的管理能力提升。通過優良的分區,DBA 可以簡化特定數據操作的執行方式。例如:DBA 在對某些分區的內容進行刪除的同時能保證余下的分區的數據完整性(這是跟對表的數據刪除這種大動作做比較的)。
此外分區是由 MySQL 系統直接管理的,DBA 不需要手工的去劃分和維護。例如:這個例如沒意思,不講了,如果你是 DBA,只要你劃分了分區,以后你就不用管了就是了。
站在性能設計的觀點上,俺們對以上的內容也是相當感興趣滴。通過使用分區和對不同的 SQL 操作的匹配設計,數據庫的性能一定能獲得巨大提升。下面咱們一起用用這個 MySQL 5.1 的新功能看看。
下面所有的測試都在 Dell Optiplex box with a Pentium 4 3.00GHz processor, 1GB of RAM 機器上,Fedora Core 4 和 MySQL 5.1.6 alpha 上運行通過。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注丸趣 TV 行業資訊頻道,感謝您對丸趣 TV 的支持。