phalcon Model 'partitions' could not be loaded(模型不支持分区语句)

注意:
   很明确提示用phalcon自带的模型层是不能用partition这个关键字的
   
   解决方法:
     自己写个PDO类
     然后用pdo中的query方法执行语句成功;




mysql分区目的
 是减少数据库的负担,提高数据库的效率,(提高表的增删改查效率)。
 

 什么是分表?
  将一个大表按照一定的规则分解成多张具有独立存储空间的实体表
  
  每个表都对应三个文件,MYD数据文件,.MYI索引文件,.frm表结构文件
  
  什么是分区?
  分区是将一个大表数据分段划分在多个位置存放
  分区后,表面上还是一张表,但数据散列到多个位置了。app读写的时候操作的还是大表名字,db自动去组织分区的数据。
   
 CREATE TABLE `orders3` (
 `order_id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
 `out_trade_no` VARCHAR(50) NOT NULL COMMENT '第三方订单号',
 `mch_id` INT(11) UNSIGNED NOT NULL COMMENT '系统商户号', 
 `writetime` INT(10) UNSIGNED NOT NULL COMMENT '下单时间',
 PRIMARY KEY (`order_id`, `writetime`)
)
ENGINE=InnoDB
COMMENT='订单表'
COLLATE='utf8_general_ci'
AUTO_INCREMENT=1
PARTITION BY RANGE (writetime)
(
   /**表的所有分区标识符: d20161111必须是唯一的名字。(注意不区分大小写)**/
	PARTITION d20161111 VALUES LESS THAN (unix_timestamp('20161111')), 
	PARTITION d20161112 VALUES LESS THAN (unix_timestamp('20161112')), 
	PARTITION dall VALUES LESS THAN MAXVALUE //这个加了后不能使用alter table `orders` add partition这个语句了
) 
INSERT INTO orders VALUES (null, '第三方订单号', 1000001, 1472550901);
INSERT INTO orders VALUES (null, '第1方订单号', 1000002, 1472513901);
 
//对未分区的表进行分区
alter table orders_channels partition by RANGE(writetime) (
    PARTITION d20161117 VALUES LESS THAN (unix_timestamp('20161118')),
    PARTITION d20161118 VALUES LESS THAN (unix_timestamp('20161119')),
    PARTITION d20161119 VALUES LESS THAN (unix_timestamp('20161120')),
);
//新增一个分区 alter table `orders` add partition (partition p20161112 values less than (unix_timestamp('20161112'))); //删除分区语句 alter table `orders` drop partition p20161116;
//查询分区语句 SELECT partition_name part, partition_expression expr, partition_description descr, FROM_DAYS(partition_description) lessthan_sendtime, table_rows FROM INFORMATION_SCHEMA.partitions WHERE TABLE_SCHEMA = SCHEMA() AND TABLE_NAME='orders_channels' ; //orders_channels只需要改表明其他不动

 

posted @ 2016-11-17 19:36  诗兄  阅读(962)  评论(0编辑  收藏  举报