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条;操作系统