我的专栏是:job_name, job_date, job_details1, job_details2 ...
没有主键列
在我的表中,我希望有15-20个不同的工作。每个作业都有准确的2个月的数据,因此每个job_date
有60个不同的job_name
。并且在每个日期之内将有100,000
个记录。
查询将始终是对一个特定的job_name
和范围job_date
的SELECT(随后是多个分组by,但这暂时不相关)。当查询特定的job_date
和某些范围的job_name
时,我不希望查询通过不相关的job_name
或job_date
。
那么,我可以做哪些优化来加快选择查询的速度呢?我正在使用MySQL5.6.17,其分区限制为8096个分区。
类似于每个job_name
的分区和其中的job_date
子分区?这是我第一次处理如此大的数据,因此我不确定这些优化。任何帮助或提示将不胜感激。
谢谢
最佳答案
“查询将始终是对一个特定job_name和一个job_date范围的选择(紧随其后的是多个分组by,但这暂时不相关)。” -基于此,您需要
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
PRIMARY KEY(job_name, job_date, id),
INDEX(id)
ENGINE=InnoDB
笔记:
InnoDB与`PK(job_name,job_date,...)的组合会聚类数据,以便您精确扫描所需的行,仅此而已。
没有分区;它没有帮助。
我要添加
AUTO_INCREMENT
并将其添加到PK中,因为PK必须是唯一的。 (并且集群需要PK。)INDEX(id)
需要id
(或以AUTO_INCREMENT
开头的某些键)。“ ...然后是group bys ...”听起来好像您正在汇总报告的数据?如果上面我的建议还不够快,让我们来谈一谈Summary Tables。您可能会获得10加速的另一个因素。
关于mysql - 优化大型MySQL表-分区吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25479832/