mysql - 优化大型 MySQL 表 - 分区?

标签 mysql partitioning

我的专栏是:

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

相关文章:

c# - 如何在不使用mysql中的函数的情况下使每个单词的首字母大写?

php - 如何获取 Woocommerce 产品库图片 URL?

mysql - 如何处理 Grails/GORM 中破裂的关系?

mysql - 如何从已截断的 Mysql 5.6 分区中清除数据?

algorithm - 数聚类/划分算法

apache-spark - 什么是随机分区?

mysql - 这两个简单的 SQL 查询有什么区别?

PHP 按两列相加排序

java - 为什么要在这里使用按位 AND?

mysql - 在mysql中对一个简单的follower表进行分区