Mysql 获取错误-';列'的用法不一致;在对表进行分区时
我有一个表Mysql 获取错误-';列'的用法不一致;在对表进行分区时,mysql,partitioning,Mysql,Partitioning,我有一个表ee\u company\u products\u listings\u par,它有许多列,包括cplc\u id和marketplaceID 这是表格的DDL:- ee_company_product_listings_par | CREATE TABLE `ee_company_product_listings_par` ( `id` int(11) NOT NULL AUTO_INCREMENT, `company_product_id` int(11) DEF
ee\u company\u products\u listings\u par
,它有许多列,包括cplc\u id
和marketplaceID
这是表格的DDL:-
ee_company_product_listings_par | CREATE TABLE `ee_company_product_listings_par` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`company_product_id` int(11) DEFAULT NULL,
`feed_dump_id` int(11) DEFAULT NULL,
`listing_status_id` int(11) DEFAULT NULL,
`sku` varchar(500) DEFAULT NULL,
`mrp` float DEFAULT NULL,
`selling_price` float DEFAULT NULL,
`quantity` int(11) NOT NULL,
`merchant_payout` float DEFAULT NULL,
`shipping_cost` float DEFAULT NULL,
`commission` float DEFAULT NULL,
`commission_service_tax` float DEFAULT NULL,
`pmt_gateway_charge` float DEFAULT NULL,
`shipping_local` float DEFAULT NULL,
`shipping_zonal` float DEFAULT NULL,
`shipping_national` float DEFAULT NULL,
`site_uid` varchar(200) DEFAULT '-',
`listing_ref_number` varchar(200) DEFAULT '-',
`UID` varchar(50) DEFAULT NULL,
`marketplaceID` int(11) NOT NULL,
`confirmed` tinyint(1) NOT NULL DEFAULT '0',
`inventory_live` tinyint(2) NOT NULL DEFAULT '1',
`update_cpl_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`sku_corrected` tinyint(1) DEFAULT '0',
`cplisting_entry_time` timestamp NULL DEFAULT NULL,
`weight` float(10,2) DEFAULT NULL,
`length` float(10,2) DEFAULT NULL,
`height` float(10,2) DEFAULT NULL,
`width` float(10,2) DEFAULT NULL,
`cplc_id` int(11) NOT NULL DEFAULT '0',
`mp_cat_id` int(11) DEFAULT NULL,
`process_id` varchar(10) DEFAULT NULL,
`host_ip` varchar(20) DEFAULT NULL,
`color` varchar(100) DEFAULT NULL,
`size` varchar(100) DEFAULT NULL,
`identifier` varchar(200) DEFAULT NULL,
`mp_brand_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`,`cplc_id`,`marketplaceID`)
) ENGINE=InnoDB AUTO_INCREMENT=21474383 DEFAULT CHARSET=latin1 |
cplc\u id
的范围为0-10000
marketplaceID
的范围为0-100
我想在这两列的基础上创建范围分区
这是我正在运行的查询:-
alter table ee_company_product_listings_par partition by range columns (cplc_id, marketplaceID) (
PARTITION p500_5 VALUES LESS THAN (500, 5),
PARTITION p500_10 VALUES LESS THAN (500,10),
PARTITION p1000_5 VALUES LESS THAN (1000,5),
PARTITION p1000_10 VALUES LESS THAN (1000,10),
partition pmax values less than MAXVALUE
);
这就是我得到的错误:-
ERROR 1064 (42000): Inconsistency in usage of column lists for partitioning near 'MAXVALUE
)' at line 4
是否有人可以帮助查找查询中的问题。搜索了整个互联网,但没有找到任何解决方案。可能会有一些愚蠢的错误,因为我对分区一无所知。任何帮助都将不胜感激。语法错误;使用以下命令:
VALUES LESS THAN (MAXVALUE, MAXVALUE)
您希望从
分区中获得什么?选择了什么
会有好处?谢谢Rick。基本上,行的数量已经超过1亿,选择完全基于这两列(cplc_id,marketplaceID),因此思想分区将显著提高与表相关的所有操作的效率。你有什么建议?WHERE
子句看起来像什么?如果只是其中cplc\u id=constant,marketplaceID=constant
,那么索引(cplc\u id,marketplaceID)
比分区更好。如果其他的在那里,让我们看看。是的..这可以做到,但很多时候我们必须根据这两列删除。因此,在这种情况下,我认为分区的性能会更好。如果没有分区,写操作也会花费很多时间,因为在这样一个大的表上,索引的大小会非常大,但是在分区之后,索引将只在每个分区上,因此写操作也会更加高效。如果我有什么地方错了,请纠正我。请给我们看一个典型的删除。你支持划分的论点与我给出的样本不符。而且。。。更新一个大索引只比更新一个小索引稍微慢一点——读修改写单个块。(区别在于定位和缓存这一块。)谢谢你的赞扬。我的博客是针对这样的论坛用户的。他们阅读了成千上万的问题,看到了模式。新手没有索引的线索。中级新手认为分区是灵丹妙药。在那之后,图案就更微妙了。