MySQL медленно работает с INNER JOIN и MATCH () AGAINST () - PullRequest
0 голосов
/ 03 сентября 2018

Кажется, у меня очень низкая производительность в выводе sql. Вот мой упрощенный sql statment с простым INNER JOIN.

Я сделал профилирование, Отправка данных кажется задержкой.

SELECT c.prod_name, c.ean, s.ean
FROM catalogue c INNER JOIN
     store s
     ON c.ean = s.ean
 WHERE MATCH(c.prod_name) AGAINST('+jumper' IN BOOLEAN MODE)
 GROUP BY s.ean
 LIMIT 100;

Вот вывод EXPLAIN

id  select_type table   partitions  type    possible_keys   key key_len ref rows     filtered   Extra
1   SIMPLE        s      NULL      index    ean             ean  32     NULL 100     100        Using index
1   SIMPLE        c      NULL      fulltext ean,prod_name   prod_name 0 const 1      10         Using where; Ft_hints: no_ranking

Создать каталог таблиц:

CREATE TABLE `catalogue` (
  `catalogue_id` int(11) NOT NULL AUTO_INCREMENT,
  `prod_name` varchar(255) DEFAULT NULL,
  `feature1` varchar(255) DEFAULT '',
  `feature2` varchar(255) DEFAULT '',
  `ean` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`catalogue_id`),
  UNIQUE KEY `ean` (`ean`),
  FULLTEXT KEY `prod_name` (`prod_name`)
) ENGINE=InnoDB AUTO_INCREMENT=3197133 DEFAULT CHARSET=utf8

Создать магазин таблиц

CREATE TABLE `store` (
  `product_id` int(11) NOT NULL AUTO_INCREMENT,
  `ean` varchar(30) CHARACTER SET latin1 NOT NULL DEFAULT '',
  `salePrice` varchar(10) CHARACTER SET latin1 NOT NULL DEFAULT '0',
  `offerPrice` varchar(10) CHARACTER SET latin1 NOT NULL DEFAULT '0',
   PRIMARY KEY (`product_id`),
  KEY `ean` (`ean`)
) ENGINE=InnoDB AUTO_INCREMENT=1835788 DEFAULT CHARSET=utf8

Я собираюсь объединить две таблицы по EAN (штрих-код Великобритании / ЕС). Таблица каталога содержит список из более чем 3,4 м продуктов с уникальным штрих-кодом. В таблице магазинов указана продажная цена каждого продукта, поскольку один и тот же продукт будет продаваться несколькими продавцами / магазинами.

Я использую AWS RDS db.t2.small - 1 vCPU - 2 ГБ памяти.

Спасибо заранее.

...