MySQL使用INNER JOIN和MATCH()AGAINST()会降低性能

时间:2018-09-03 17:26:20

标签: mysql sql amazon-rds

我的sql输出中似乎有极慢的性能。 这是我用简单的INNER JOIN精简的sql语句。

我确实完成了任务,发送数据似乎是个难题。

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(英国/欧盟条形码)将两个表合并。目录表列出了超过340万种带有UNIQUE条码的产品。商店表具有每种产品的售价,因为我将由多个卖家/商店出售相同的产品。

我正在使用AWS RDS db.t2.small-1个vCPU-2GiB内存。

非常感谢。

0 个答案:

没有答案