对 table 进行分区会提高此 GROUP BY 查询的性能吗?

Would partitioning the table improve the performance of this GROUP BY query?

我有一个 MySQL table 说 data_table

mysql> desc data_table;
+------------+------------------+------+-----+---------+----------------+
| Field      | Type             | Null | Key | Default | Extra          |
+------------+------------------+------+-----+---------+----------------+
| id         | int(11)          | NO   | PRI | NULL    | auto_increment |
| prod_id    | int(10) unsigned | NO   |     | NULL    |                |
| date       | date             | NO   |     | NULL    |                |
| cost       | double           | NO   |     | NULL    |                |
+------------+------------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

这个 table 有大约 7 亿行。我在 prod_iddate 上创建了索引。我需要执行这样的查询 -

SELECT `id`, `prod_id`, WEEKOFYEAR(`date`) AS period, SUM(`cost`) AS cost_sum
FROM `data_table` GROUP BY `prod_id`, `period`;

我的问题是-

在几个月(~20 个分区)上对 table 进行分区会提高此查询的性能吗?

根据记录的数量和您编写的 SQL 查询,我会说是的,如果正确完成分区会有很大帮助。我会更进一步,建议在日期字段上进行范围分区。这是一种非常常见的分区方法,效果很好并且易于实现。

你没有提到 MySQL 的发布你 运行 所以你必须做一些额外的阅读 HERE 来理解你的 MySQL 发布支持。

您也可以在命令提示符下运行这个SQL。

mysql> SHOW VARIABLES LIKE %partition%

这应该根据您的发布返回 "have Partitioning = Yes" 或 "Partition_engine = yes"。

如果您看到有很多基于周数的查询,将周数永久存储为列是有意义的。我们可以节省 select 期间的计算。 理想的策略是了解您将要查询的内容 运行,然后相应地设计您的表。

PARTITIONing 不会 有任何帮助。不是BY RANGE;没有其他味道。

查询必须读取 table 中的每一行;分区不会改变这一事实,也根本无法加快速度。

目前的查询有一个不相关的问题。对于每个 GROUP,哪个 id 应该 return?答:会return一个'random'id.