Roh*_*han 6 mysql performance partitioning percona query-performance
我有一个基于主键的分区表,其中包含 15 亿行。但是当我检查.ibd
文件时,GB 中只有 80 ibd 显示,而 120ibd 显示 1MB 文件。我想知道当我使用PARTITIONS 200
. 我的结构如下。鉴于这一点id
,checksum
两者都是独一无二的。
CREATE TABLE `mapping` (
`id` varchar(50) NOT NULL DEFAULT '',
`sha_checksum` varchar(50) NOT NULL DEFAULT '',
`path_id` varchar(90) DEFAULT NULL,
`file_id` varchar(35) DEFAULT NULL,
`server_id` CHAR(6) DEFAULT NULL,
PRIMARY KEY (`id`,`sha_checksum`)
) ENGINE=InnoDB
/*!50100 PARTITION BY KEY (id,sha_checksum)
PARTITIONS 200 */
Run Code Online (Sandbox Code Playgroud)
请帮助我理解我错在哪里。
让我反对这种分区风格,而不是试图解释为什么大多数分区看起来是空的。
坦率地说,PK & BY KEY(id, sha1) 没有获得任何性能,也没有任何我能想象到的其他好处。
请注意,要获得“分区修剪”,您必须同时指定 id 和 sha_checksum。性能基本上与具有相同主键的非分区表相同。
由于记录随机分散,我认为“可传输表空间”没有用处。
您使用什么版本的 MySQL?
您使用什么字符集?(我正在考虑空间考虑因素,特别是对于 CHAR 列。)
请描述id
及应用;我可以帮助你设计一个更好的PARTITION方案,或者继续反对它。
另一件需要注意的事情是:超过大约 50 个分区会因多种原因而减慢速度,其中之一是发生 INSERT 时所有分区都会打开。(非常新的版本已经“修复”了“修剪”失败的问题。)