如何对具有PK和唯一键的MySQL表进行分区?

如何对具有PK和唯一键的MySQL表进行分区?,mysql,database,primary-key,partitioning,unique-key,Mysql,Database,Primary Key,Partitioning,Unique Key,我的模式中有一个中心表,它的查询速度越来越慢,因为它达到了~6M行。 我计划对一些索引进行修改,以更好地满足查询的需要 我还考虑对表进行分区,以使newst记录与旧记录分开。TEM系统需要查询最近3个月的记录。可能需要每天或在报告中使用较旧的记录。但保留所有记录很重要,不要让相同的记录(唯一密钥)因客户错误再次进入系统(他们每天都尝试这样做) 既然我有一个PK和一个唯一的键,我如何组合分区表达式 多少分区看起来是一个好的起点 分区这个表似乎是个好主意 示例表: 实际表的列数和其他一些索引数是实

我的模式中有一个中心表,它的查询速度越来越慢,因为它达到了~6M行。 我计划对一些索引进行修改,以更好地满足查询的需要

我还考虑对表进行分区,以使newst记录与旧记录分开。TEM系统需要查询最近3个月的记录。可能需要每天或在报告中使用较旧的记录。但保留所有记录很重要,不要让相同的记录(唯一密钥)因客户错误再次进入系统(他们每天都尝试这样做)

  • 既然我有一个PK和一个唯一的键,我如何组合分区表达式
  • 多少分区看起来是一个好的起点
  • 分区这个表似乎是个好主意 示例表:

    • 实际表的列数和其他一些索引数是实际表的3倍
    • 与其他7个表一样,FK指向该表的id
    • 此表的一个简单mysqldump将生成一个2.3GB的文件
    • 现在,它每月增加约100万行
    • mysql版本14.14发行版5.1.73,适用于使用readline 6.1的debian linux gnu(x86_64)

    与其他7个表一样,FK指向该表的id。
    这是一个快速的禁止。分区(innodb)表不能与外键一起使用。分区是一种只在非常特定的情况下才有用的工具,而使用您独特的索引,我认为分区绝对不会对您有所帮助。你应该专注于(好)索引。考虑负载平衡/分离读写服务器,这将提供更好的性能。<代码> TAXYIDID<代码>——如果你的出租车在你的机器里被入侵,我会在你后面。雇佣一名安全顾问。@EthraZa正如我所说的,我想你高估了分区的好处。这就是为什么它不像你想象的那么重要。分区不是用来提高总体性能的(它实际上会降低大多数查询的速度,除了非常特定的查询),而是用来解决特定的问题。你没有这些。索引确实是您要寻找的工具!现在,你准备好听另一件你(也许)无法相信的事情了吗?MyISAM根本不支持外键(不仅与分区一起支持)。人们仍然在使用它(比你想象的要多)。我列出了它们。其中之一是清除旧数据,您还没有提到。(我同意Solareflare。)
    就像其他7张表一样,FK指向该表的id。
    这是一个快速的禁区。分区(innodb)表不能与外键一起使用。分区是一种只在非常特定的情况下才有用的工具,而使用您独特的索引,我认为分区绝对不会对您有所帮助。你应该专注于(好)索引。考虑负载平衡/分离读写服务器,这将提供更好的性能。<代码> TAXYIDID<代码>——如果你的出租车在你的机器里被入侵,我会在你后面。雇佣一名安全顾问。@EthraZa正如我所说的,我想你高估了分区的好处。这就是为什么它不像你想象的那么重要。分区不是用来提高总体性能的(它实际上会降低大多数查询的速度,除了非常特定的查询),而是用来解决特定的问题。你没有这些。索引确实是您要寻找的工具!现在,你准备好听另一件你(也许)无法相信的事情了吗?MyISAM根本不支持外键(不仅与分区一起支持)。人们仍然在使用它(比你想象的要多)。我列出了它们。其中之一是清除旧数据,您还没有提到。(我同意索拉雷的观点。)
    CREATE TABLE `docs` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT,
      `taxId` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
      `creator` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
      `model` int(2) NOT NULL,
      `serie` varchar(3) COLLATE utf8_unicode_ci NOT NULL,
      `num` varchar(9) COLLATE utf8_unicode_ci NOT NULL,
      `creationDt` datetime NOT NULL,
      `modificationDt` datetime NOT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `main` (`taxId`,`model`,`serie`,`num`,`creator`),
      KEY `cdt` (`creationDt`, `model`, `taxId`), 
      KEY `mdt` (`modificationDt`, `model`, `taxId`)
    ) ENGINE=InnoDB AUTO_INCREMENT=7412843 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci