我的专栏是:
job_name、job_date、job_details1、job_details2 ...
没有主键列
在我的表格中,我预计有 15-20 个不同的工作。每个作业都包含 2 个月的数据,因此每个 job_name
有 60 个不同的 job_date
。每个日期内都会有 100,000
条记录。
查询将始终是一个特定job_name
和一系列job_date
的SELECT(后面跟着几个分组,但目前不相关)。我不希望查询在查询特定的 job_name
和某些范围的 时经历不相关的
。job_date
或 job_name
工作日期
那么我可以做哪些优化来使我的选择查询更快?我使用的是MySQL5.6.17,它的分区限制为8096个分区。
类似于按 job_name
进行分区并为其中的 job_date
进行子分区?这是我第一次处理如此大的数据,所以我不确定这些优化。任何帮助或提示将不胜感激。
谢谢
最佳答案
“查询将始终是针对一个特定 job_name 和一系列 job_date 的 SELECT(后面跟着几个分组,但目前不相关)。” -- 基于此,您需要
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_INCRMENT
并将其添加到 PK 中,因为 PK 必须是唯一的。 (并且聚类需要PK。) INDEX(id)
(或以id
开头的某个键)是AUTO_INCRMENT
所必需的。<
“...后跟分组...”听起来您正在总结报告的数据?如果我上面的建议还不够快的话,我们来谈谈Summary Tables 。您可能会获得另外 10 倍的加速。
关于mysql - 优化大型 MySQL 表 - 分区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25479832/