对 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_id
和 date
上创建了索引。我需要执行这样的查询 -
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
.
我有一个 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_id
和 date
上创建了索引。我需要执行这样的查询 -
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
.