ITPub博客

首页 > 数据库 > MySQL > 分区表的浅析

分区表的浅析

原创 MySQL 作者:yleizzz 时间:2016-05-06 19:00:06 0 删除 编辑
list 分区

两个相同结构的表 ,数据量也一样16000000条记录
CREATE TABLE `corp_base_par` (
  `t_date` datetime DEFAULT NULL COMMENT '变动日期',
  `corp_id` bigint(20) NOT NULL AUTO_INCREMENT,
  `controller` int(11) DEFAULT NULL COMMENT '控制人编号',
  `corp_name` varchar(100) DEFAULT NULL COMMENT '企业名称',
  `artificial_person` varchar(50) DEFAULT NULL COMMENT '企业法人',
  `corp_bln` varchar(100) DEFAULT NULL COMMENT '营业执照号码',
  `corp_type` varchar(255) DEFAULT NULL COMMENT '公司类型',
  `corp_bs` varchar(2000) DEFAULT NULL COMMENT '经营范围',
  `corp_rc` decimal(20,4) DEFAULT NULL COMMENT '注册资本(万元)',
  `corp_pc` decimal(20,4) DEFAULT NULL COMMENT '实收资本',
  `currency_code` varchar(10) DEFAULT NULL COMMENT '货币代码',
  `corp_edate` date DEFAULT NULL COMMENT '企业成立日期',
  `corp_addr` varchar(500) DEFAULT NULL COMMENT '注册地址',
  `corp_rdate` date DEFAULT NULL COMMENT '注册登记日期',
  `corp_ddate` date DEFAULT NULL COMMENT '注册登记到期日',
  `register_org` varchar(200) DEFAULT NULL COMMENT '登记机关',
  `approval_date` date DEFAULT NULL COMMENT '核准日期',
  `approval_status` varchar(50) DEFAULT NULL COMMENT '核准状态',
  `industry_category` varchar(50) DEFAULT NULL COMMENT '行业分类',
  `org_id` varchar(20) DEFAULT NULL COMMENT '组织机构代码',
  `tax_id` varchar(20) DEFAULT NULL COMMENT '税务登记证号',
  `company_ID` varchar(200) DEFAULT NULL COMMENT '工商总局企业ID',
  `zhejiang_id` char(100) DEFAULT NULL COMMENT '浙江企业id',
  `get_date` date DEFAULT NULL COMMENT '抓取日期',
  `res_date`  int DEFAULT NULL COMMENT '数据来源',
  `canc_date` date DEFAULT NULL COMMENT '注销日期',
  `quantum_id` varchar(255) DEFAULT NULL COMMENT '量子id',
  PRIMARY KEY (`corp_id`,res_date),
  KEY `idx_resdate` (`res_date`),
  KEY `idx_corp_name` (`corp_name`),
  KEY `idx_art_person` (`artificial_person`),
  KEY `idx_t_date` (`t_date`)
) ENGINE=InnoDB AUTO_INCREMENT=100016970843 DEFAULT CHARSET=utf8 COMMENT='企业基本信息'
/*!50100 PARTITION BY LIST (res_date)
(PARTITION p0 VALUES  in (100000) ENGINE = InnoDB,
PARTITION p1 VALUES in (110000) ENGINE = InnoDB,
PARTITION p2 VALUES  in (120000) ENGINE = InnoDB,
PARTITION p3 VALUES in (130000) ENGINE = InnoDB,
PARTITION p4 VALUES  in (140000) ENGINE = InnoDB,
PARTITION p5 VALUES in (150000) ENGINE = InnoDB,
PARTITION p6 VALUES  in (210000) ENGINE = InnoDB,
PARTITION p7 VALUES in (220000) ENGINE = InnoDB,
PARTITION p8 VALUES  in (230000) ENGINE = InnoDB,
PARTITION p9 VALUES in (310000) ENGINE = InnoDB,
PARTITION p10 VALUES  in (320000) ENGINE = InnoDB,
PARTITION p11 VALUES in (330000) ENGINE = InnoDB,
PARTITION p12 VALUES  in (340000) ENGINE = InnoDB,
PARTITION p13 VALUES in (350000) ENGINE = InnoDB,
PARTITION p14 VALUES  in (360000) ENGINE = InnoDB,
PARTITION p15 VALUES in (370000) ENGINE = InnoDB,
PARTITION p16 VALUES  in (410000) ENGINE = InnoDB,
PARTITION p17 VALUES in (420000) ENGINE = InnoDB,
PARTITION p18 VALUES  in (430000) ENGINE = InnoDB,
PARTITION p19 VALUES in (440000) ENGINE = InnoDB,
PARTITION p20 VALUES  in (450000) ENGINE = InnoDB,
PARTITION p21 VALUES in (460000) ENGINE = InnoDB,
PARTITION p22 VALUES  in (500000) ENGINE = InnoDB,
PARTITION p23 VALUES in (510000) ENGINE = InnoDB,
PARTITION p24 VALUES  in (520000) ENGINE = InnoDB,
PARTITION p25 VALUES in (530000) ENGINE = InnoDB,
PARTITION p26 VALUES  in (540000) ENGINE = InnoDB,
PARTITION p27 VALUES in (610000) ENGINE = InnoDB,
PARTITION p28 VALUES  in (620000) ENGINE = InnoDB,
PARTITION p29 VALUES in (630000) ENGINE = InnoDB,
PARTITION p30 VALUES  in (640000) ENGINE = InnoDB,
PARTITION p31 VALUES in (650000) ENGINE = InnoDB,
PARTITION p32 VALUES in (0) ENGINE = InnoDB) */;

---------------------------------------------------------------------------------
CREATE TABLE `corp_base` (
  `t_date` datetime DEFAULT NULL COMMENT '变动日期',
  `corp_id` bigint(20) NOT NULL AUTO_INCREMENT,
  `controller` int(11) DEFAULT NULL COMMENT '控制人编号',
  `corp_name` varchar(100) DEFAULT NULL COMMENT '企业名称',
  `artificial_person` varchar(50) DEFAULT NULL COMMENT '企业法人',
  `corp_bln` varchar(100) DEFAULT NULL COMMENT '营业执照号码',
  `corp_type` varchar(255) DEFAULT NULL COMMENT '公司类型',
  `corp_bs` varchar(2000) DEFAULT NULL COMMENT '经营范围',
  `corp_rc` decimal(20,4) DEFAULT NULL COMMENT '注册资本(万元)',
  `corp_pc` decimal(20,4) DEFAULT NULL COMMENT '实收资本',
  `currency_code` varchar(10) DEFAULT NULL COMMENT '货币代码',
  `corp_edate` date DEFAULT NULL COMMENT '企业成立日期',
  `corp_addr` varchar(500) DEFAULT NULL COMMENT '注册地址',
  `corp_rdate` date DEFAULT NULL COMMENT '注册登记日期',
  `corp_ddate` date DEFAULT NULL COMMENT '注册登记到期日',
  `register_org` varchar(200) DEFAULT NULL COMMENT '登记机关',
  `approval_date` date DEFAULT NULL COMMENT '核准日期',
  `approval_status` varchar(50) DEFAULT NULL COMMENT '核准状态',
  `industry_category` varchar(50) DEFAULT NULL COMMENT '行业分类',
  `org_id` varchar(20) DEFAULT NULL COMMENT '组织机构代码',
  `tax_id` varchar(20) DEFAULT NULL COMMENT '税务登记证号',
  `company_ID` varchar(200) DEFAULT NULL COMMENT '工商总局企业ID',
  `zhejiang_id` char(100) DEFAULT NULL COMMENT '浙江企业id',
  `get_date` date DEFAULT NULL COMMENT '抓取日期',
  `res_date` varchar(100) DEFAULT NULL COMMENT '数据来源',
  `canc_date` date DEFAULT NULL COMMENT '注销日期',
  `quantum_id` varchar(255) DEFAULT NULL COMMENT '量子id',
  PRIMARY KEY (`corp_id`),
  KEY `idx_resdate` (`res_date`),
  KEY `idx_corp_name` (`corp_name`),
  KEY `idx_art_person` (`artificial_person`),
  KEY `idx_t_date` (`t_date`)
) ENGINE=InnoDB AUTO_INCREMENT=100017504860 DEFAULT CHARSET=utf8 COMMENT='企业基本信息';

------------------------结果------------------------------------------------------------------------------------------------------------
mysql>  show profiles;
+----------+------------+-----------------------------------------------------------------------------------------------------------+
| Query_ID | Duration   | Query                                                                                                     |
+----------+------------+-----------------------------------------------------------------------------------------------------------+
|        1 | 0.00107675 | select * from corp_base where corp_name like '娃哈哈商业股份有限公司%' and res_date='330000'              |
|        2 | 0.00397325 | select * from corp_base_par where corp_name like '娃哈哈商业股份有限公司%' and res_date=330000            |
|        3 | 0.13822650 | select * from corp_base where res_date='330000' limit 100                                                 |
|        4 | 0.01605200 | select * from corp_base_par where res_date=330000 limit 100                                               |
+----------+------------+-----------------------------------------------------------------------------------------------------------+
4 rows in set (0.00 sec)


如果使用到了res_date 分区的字段查询 效果 明显 比 只使用res_date 作为索引来查询 快了10倍 如3,4

但是 如果使用别的索引条件 加上
分区字段效果 没有显著提升 如1,2,下图为1,2的执行计划












来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30127122/viewspace-2095052/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: mysql复制
下一篇: 性能分析profiling
请登录后发表评论 登录
全部评论

注册时间:2015-02-03

  • 博文量
    101
  • 访问量
    184277