MySql 5.6 手冊:http://dev.mysql.com/doc/refman/5.6/en/partitioning.htmlhtml
舉個例子,操做系統中的分區,是將硬盤根據大小進行邏輯分區,就是咱們看到的C、D、E、F盤,邏輯分區仍是在同一個操做系統中。數據庫產品的Partition分區也是同樣的道理,將數據進行邏輯分區,對數據劃分界限。
mysql
MySql 支持Range,List,Hash,Key。最長用的是Range。注意不一樣的版本對分區類型的支持有些不一樣!sql
Range:範圍 CREATE TABLE employees ( id INT NOT NULL, fname VARCHAR(30), lname VARCHAR(30), hired DATE NOT NULL DEFAULT '1970-01-01', separated DATE NOT NULL DEFAULT '9999-12-31', job_code INT NOT NULL, store_id INT NOT NULL ) PARTITION BY RANGE (store_id) ( PARTITION p0 VALUES LESS THAN (6), PARTITION p1 VALUES LESS THAN (11), PARTITION p2 VALUES LESS THAN (16), PARTITION p3 VALUES LESS THAN (21) );
LIST:列表 CREATE TABLE employees ( id INT NOT NULL, fname VARCHAR(30), lname VARCHAR(30), hired DATE NOT NULL DEFAULT '1970-01-01', separated DATE NOT NULL DEFAULT '9999-12-31', job_code INT, store_id INT ) PARTITION BY LIST(store_id) ( PARTITION pNorth VALUES IN (3,5,6,9,17), PARTITION pEast VALUES IN (1,2,10,11,19,20), PARTITION pWest VALUES IN (4,12,13,14,18), PARTITION pCentral VALUES IN (7,8,15,16) );
Key:鍵 CREATE TABLE k1 ( id INT NOT NULL, name VARCHAR(20), UNIQUE KEY (id) ) PARTITION BY KEY() PARTITIONS 2;
HASH:哈希 CREATE TABLE employees ( id INT NOT NULL, fname VARCHAR(30), lname VARCHAR(30), hired DATE NOT NULL DEFAULT '1970-01-01', separated DATE NOT NULL DEFAULT '9999-12-31', job_code INT, store_id INT ) PARTITION BY HASH( YEAR(hired) ) PARTITIONS 4;
數據:新聞表,2010開始記錄,假設10年到15年每一年的數據爲200W,總數1000W;數據庫
條件:查詢15年7月全部的新聞數據;性能
未分區:須要把表遍歷,1000W條數據,查詢性能就不用說了;spa
分區:按照年份分區,當要查詢15年數據,只會遍歷15年的數據200W條;操作系統