У меня вопрос с разделами и объединением таблиц в 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
);
Б распределяли таблица произрастает около 3 Millon строк в месяц. Критерием раздела по полю 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?
- Помогает ли раздел в моем примере?
- Есть ли другой подход (другие критерии разделения и т. Д.), Которые помогают получить доступ к более низкому числу строк или запрос выполняется быстрее?
Я беспокоюсь о выполнении этого запроса в течение года с кругом 40 миллионов строк. Таким образом, любая помощь очень ценится.
спасибо, что для вашего объяснения. Я не могу отметить ваш ответ как последний, но это полезно, и для меня это имеет смысл. Так что спасибо. –