Mysql:连接表中的性能分区

Mysql:连接表中的性能分区,mysql,database,query-optimization,partitioning,database-partitioning,Mysql,Database,Query Optimization,Partitioning,Database Partitioning,我对MySQL中的分区和连接表有一个问题。 我有以下示例模式: CREATE TABLE A ( `ID` BIGINT NOT NULL AUTO_INCREMENT, `NAME` varchar(50) DEFAULT NULL, PRIMARY KEY (`ID`), KEY `IDX_A_NAME` (`NAME`), ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; CREATE TABLE B ( `ID` BIGINT

我对MySQL中的分区和连接表有一个问题。 我有以下示例模式:

CREATE TABLE A (
`ID` BIGINT NOT NULL AUTO_INCREMENT,
`NAME` varchar(50) DEFAULT NULL,
PRIMARY KEY (`ID`),
KEY `IDX_A_NAME` (`NAME`),
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

CREATE TABLE B (
`ID` BIGINT NOT NULL AUTO_INCREMENT,
`VALUE` double(22,6) DEFAULT NULL,
`A_REF` BIGINT DEFAULT NULL,
PRIMARY KEY (`ID`),
KEY `IDX_A_REF` (`A_REF`),
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
PARTITION BY RANGE( A_REF ) (
                PARTITION p1000 VALUES LESS THAN (1000),
    PARTITION p2000 VALUES LESS THAN (2000),
    PARTITION p3000 VALUES LESS THAN (3000),
    PARTITION future VALUES LESS THAN MAXVALUE
                            );
B分区表每月增长约300万行。 A_REF字段的分区条件是因为B表正在通过如下查询进行访问(目前无法更改):

所以,我的问题是

  • 执行解释分区时。。。通过此查询,可以在EXPLAIN输出中访问所有分区。这是否意味着所有分区都在执行过程中被实际访问?或者它只是分区信息
  • 将分区标准作为联接字段是否有帮助
  • 在我的示例中,分区有帮助吗
  • 是否有其他方法(另一个分区标准等)可以帮助访问更少的行或查询执行得更快
我担心执行这个查询一年会有大约4000万行。因此,非常感谢您的帮助。

要加快查询速度,请去掉分区

修剪失败了(我想),因为它没有一个常数来选择分区。相反,
JOIN
到达所有分区。除了一个之外,其余的都不返回任何内容,其中包含一个_REF的那个返回了行,就好像它是一个未分区的表一样


在许多情况下,分区对性能没有帮助;你似乎找到了一个很痛的地方。

谢谢你的解释。我不能把你的答案记为最后一个,但它很有帮助,对我来说也很有意义。所以,谢谢。
SELECT B.VALUE
FROM A
INNER JOIN B ON A.ID = B.A_REF
WHERE A.NAME = 'James'