標籤:
Partition 分區
拿來主義,MySql 5.6 手冊:http://dev.mysql.com/doc/refman/5.6/en/partitioning.html
分區類型
MySql 支援Range,List,Hash,Key。最長用的是Range
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條資料,查詢效能就不用說了;
分區:按照年份分區,當要查詢15年資料,只會遍曆15年的資料200W條;
Mysql Partition分區(理論)