我的架构中有这个中心表,查询速度很慢,因为它达到~6M行。 我计划在示例中更改某些索引,以尝试更好地满足查询需求。
我还考虑对表进行分区,让最新的记录与旧的记录分开。系统oftem需要查询最近3个月的记录。较旧的记录可能需要在evetually或报告中。但是,保持所有这一点非常重要,不要让相同的记录(UNIQUE KEY)再次因客户错误而进入系统(他们每天都会尝试这样做)。
示例表:
- 真实表的列数和其他索引数量增加了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