0
我对MySQL中的分区和连接表有疑问。 我有这个示例模式: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分区表的增长每月约3米荣行。 通过A_REF场分区标准是原因是b表正在用类似下面的查询访问(现在,这是不能改变的):
SELECT B.VALUE
FROM A
INNER JOIN B ON A.ID = B.A_REF
WHERE A.NAME = 'James'
所以,我的问题是
- 当执行EXPLAIN PARTITIONS ...使用此查询,所有分区都在EXPLAIN输出中进行访问。这是否意味着在执行过程中所有分区都是实际上是?或者它只是分区信息?
- 它有助于分区标准是JOIN字段吗?
- 分区帮助在我的例子中?
- 是否有任何其他方法(另一个分区标准等)有助于访问较少的行数或查询执行速度更快?
我很担心执行这个查询一年4000万行的查询。所以,任何帮助都非常感激。
感谢您的解释。我不能将你的答案标记为最终答案,但它是有帮助的,对我来说这一切都很重要。那谢谢啦。 – 2015-06-16 06:00:11