如何分区具有PK和UNIQUE KEY的MySQL表?

时间:2016-10-27 21:18:50

标签: mysql database primary-key partitioning unique-key

我的架构中有这个中心表,查询速度很慢,因为它达到~6M行。 我计划在示例中更改某些索引,以尝试更好地满足查询需求。

我还考虑对表进行分区,让最新的记录与旧的记录分开。系统oftem需要查询最近3个月的记录。较旧的记录可能需要在evetually或报告中。但是,保持所有这一点非常重要,不要让相同的记录(UNIQUE KEY)再次因客户错误而进入系统(他们每天都会尝试这样做)。

  1. 如何编写分区表达式,因为我有PK和UNIQUE KEY?
  2. 多少分区是一个好的起点?
  3. 对此表进行分区看起来好像是一个好主意?
  4.   

    示例表:

         
        
    • 真实表的列数和其他索引数量增加了3倍。
    •   
    • 与其他7张表格一样,FK指向此表格的ID。
    •   
    • 这个表的一个简单的mysqldump可以添加一个2.3GB的文件。
    •   
    • 现在每月大约增加1M行。
    •   
    • mysql Ver 14.14使用readline 6.1分发5.1.73,用于debian-linux-gnu(x86_64)
    •   
    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
    

0 个答案:

没有答案