优化大型MySQL表 - 分区?

时间:2014-08-25 06:02:20

标签: mysql partitioning

我的专栏是:

job_name, job_date, job_details1, job_details2 ...

没有主键列

在我的表中,我希望有15-20个不同的工作。每个作业只有2个月的数据,因此每job_datejob_name 60个不同100,000。在每个日期内都会有job_name条记录。

查询将永远是一个特定job_date的选择和job_date的范围(后面跟几个分组,但现在这是无关紧要的)。在查询特定job_name和某些job_name范围时,我不希望查询通过不相关的job_datejob_name

那么我可以做些什么样的优化来使我的选择查询更快?我正在使用MySQL5.6.17,它的分区限制为8096个分区。

对于job_date内的{{1}}分区和{{1}}内的分区,有什么用?这是我第一次处理这么大的数据,所以我不确定这些优化。任何帮助或提示将不胜感激。

由于

1 个答案:

答案 0 :(得分:0)

“查询将永远是一个特定job_name的SELECT和一系列job_date(后面跟着几个group 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,...)的组合将数据聚类,以便您完全扫描所需的行,而 nothing 更多。
  • 没有分区;它无济于事。
  • 我正在添加AUTO_INCREMENT并将其添加到PK,因为PK 必须是唯一的。 (并且聚类需要PK。)
  • {li> INDEX(id)(或某些关键id开头AUTO_INCREMENT需要。

“......其次是分组...”这听起来像是在汇总报告数据?如果我上面的建议不够快,那就谈谈Summary Tables。你可能会得到另一个10加速因子。