[英]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.