繁体   English   中英

内部连接0846秒的慢速mysql查询

[英]slow mysql query with inner join 0846 sec

我对INNER JOIN使用查询时遇到另一个问题

这个查询

SELECT *
FROM `engine4_product_file` INNER JOIN
     `engine4_file`
     ON engine4_product_file.fid = engine4_file.id
WHERE engine4_product_file.pid IN (3347,3346,3345,3343,3342,3337) and
      engine4_file.active = 1 AND
      engine4_file.ext IN ('jpg','gif','png','jpeg')

这个创建表engine4_product_file

 CREATE TABLE `engine4_product_file` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `fid` int(11) NOT NULL,
  `pid` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `engine4_product_file` (`fid`),
  KEY `pid` (`pid`)
) ENGINE=InnoDB AUTO_INCREMENT=6549 DEFAULT CHARSET=latin1

这个创建表engine4_file

CREATE TABLE `engine4_file` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `uid` int(11) NOT NULL,
  `name` longtext CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  `url` longtext CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `active` int(11) NOT NULL DEFAULT '1',
  `size` int(11) DEFAULT NULL,
  `ext` varchar(10) DEFAULT NULL,
  `folder` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=48801 DEFAULT CHARSET=latin1

这解释

id  select_type     table   type    possible_keys   key     key_len     ref     rows    Extra   
1   SIMPLE  engine4_product_file    range   engine4_product_file,pid    pid     4   NULL    30  Using where
1   SIMPLE  engine4_file    eq_ref  PRIMARY     PRIMARY     4   akafine_social2.engine4_product_file.fid    1   Using where

更改您的条件

  WHERE  engine4_file.active = 1 AND
         engine4_file.ext IN ('jpg','gif','png','jpeg') AND
  engine4_product_file.pid IN (3347,3346,3345,3343,3342,3337) 

添加索引

 ALTER TABLE engine4_file ADD KEY (active,ext)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM