具有分区限制的 MySQL 分区

Roh*_*han 6 mysql performance partitioning percona query-performance

我有一个基于主键的分区表,其中包含 15 亿行。但是当我检查.ibd文件时,GB 中只有 80 ibd 显示,而 120ibd 显示 1MB 文件。我想知道当我使用PARTITIONS 200. 我的结构如下。鉴于这一点idchecksum两者都是独一无二的。

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)

请帮助我理解我错在哪里。

Ric*_*mes 1

让我反对这种分区风格,而不是试图解释为什么大多数分区看起来是空的。

坦率地说,PK & BY KEY(id, sha1) 没有获得任何性能,也没有任何我能想象到的其他好处。

请注意,要获得“分区修剪”,您必须同时指定 id 和 sha_checksum。性能基本上与具有相同主键的非分区表相同。

由于记录随机分散,我认为“可传输表空间”没有用处。

您使用什么版本的 MySQL?

您使用什么字符集?(我正在考虑空间考虑因素,特别是对于 CHAR 列。)

请描述id及应用;我可以帮助你设计一个更好的PARTITION方案,或者继续反对它。

另一件需要注意的事情是:超过大约 50 个分区会因多种原因而减慢速度,其中之一是发生 INSERT 时所有分区都会打开。(非常新的版本已经“修复”了“修剪”失败的问题。)