一、参考:通過分區(Partition)提升MySQL性能(一), 内容如下:
什麼是數據庫分區?
雖然分區技術可以實現很多效果,但其主要目的是為了在特定的SQL操作中減少數據讀寫的總量以縮減響應時間。
分區主要有兩種形式:
1.水平分區(Horizontal Partitioning)這種形式分區是對表的行進行分區,通過這樣的方式不同分組裡面的物理列分割的數據集得以組合,從而進行個體分割(單分區)或集體分割(1個或多個分區)。所有在表中定義的列在每個數據集中都能找到,所以表的特性依然得以保持。
舉個簡單例子:一個包含十年發票記錄的表可以被分區為十個不同的分區,每個分區包含的是其中一年的記錄。(這裡具體使用的分區方式我們後面再說,可以先說一點,一定要通過某個屬性列來分割,譬如這裡使用的列就是年份)
2.垂直分區(Vertical Partitioning) 這種分區方式一般來說是通過對表的垂直劃分來減少目標表的寬度,使某些特定的列被劃分到特定的分區,每個分區都包含了其中的列所對應的行。
舉個簡單例子:一個包含了大text和BLOB列的表,這些text和BLOB列又不經常被訪問,這時候就要把這些不經常使用的text和BLOB了劃分到另一個分區,在保證它們數據相關性的同時還能提高訪問速度。
如何進行實際分區:
看看分區的實際效果吧。我們建立幾個同樣的MyISAM引擎的表,包含日期敏感的數據,但只對其中一個分區。分區的表(表名為part_tab)我們採用Range範圍分區模式,通過年份進行分區:
mysql> CREATE TABLE part_tab
-> ( c1 int default NULL,
-> c2 varchar(30) default NULL,
-> c3 date default NULL
-> ) engine=myisam
-> PARTITION BY RANGE (year(c3)) (PARTITION p0 VALUES LESS THAN (1995),
-> PARTITION p1 VALUES LESS THAN (1996) , PARTITION p2 VALUES LESS THAN (1997) ,
-> PARTITION p3 VALUES LESS THAN (1998) , PARTITION p4 VALUES LESS THAN (1999) ,
-> PARTITION p5 VALUES LESS THAN (2000) , PARTITION p6 VALUES LESS THAN (2001) ,
-> PARTITION p7 VALUES LESS THAN (2002) , PARTITION p8 VALUES LESS THAN (2003) ,
-> PARTITION p9 VALUES LESS THAN (2004) , PARTITION p10 VALUES LESS THAN (2010),
-> PARTITION p11 VALUES LESS THAN MAXVALUE );
Query OK, 0 rows affected (0.00 sec)
二、参考:通過分區(Partition)提升MySQL性能(二),内容如下:
通过上面的知识,经过实验,我们有了如下结论:
初步结论:
1.分區和未分區佔用文件空間大致相同 (數據和索引文件)
2.如果查詢語句中有未建立索引字段,分區時間遠遠優於未分區時間
3.如果查詢語句中字段建立了索引,分區和未分區的差別縮小,分區略優於未分區
最终结论:
1.對於大數據量,建議使用分區功能
2.去除不必要的字段
3.根據手冊, 增加 myisam_max_sort_file_size 會增加分區性能
–end