我的专栏是:

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_namejob_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/

10-16 18:48