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 
          ); 

Б распределяли таблица произрастает около 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 миллионов строк. Таким образом, любая помощь очень ценится.

ответ

1

Чтобы ускорить , этот запрос, избавиться от разметки.

Обрезка не удалась (я думаю), потому что у нее не было постоянной, чтобы выбрать раздел. Вместо этого JOIN достиг всех разделов. Все, кроме одного, ничего не возвращали, тот, у которого есть A_REF, возвращал строки (строки) так же, как если бы это была неразделенная таблица.

Существует много случаев, когда разделение не помогает производительности; вы, кажется, нашли там, где это больно.

+0

спасибо, что для вашего объяснения. Я не могу отметить ваш ответ как последний, но это полезно, и для меня это имеет смысл. Так что спасибо. –

Смежные вопросы