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只需要改表明其他不动