Здраствуйте.
Никак не пойму какой тут ещё индекс нужен или где что не так (
Значения IN выбраны заранее из таблицы randkey. Для удобства теста я привел строки необходимые для выполнения данного запроса.
Запрос:
SELECT `photo`.`gid` , `photo`.`apid` , `photo`.`aid` , `photo`.`pid`
FROM `photo`
JOIN `randkey` ON `randkey`.`id_photo` = `photo`.`apid`
WHERE `randkey`.`key`
IN ( 904, 2485, 2170, 1786, 2988, 2267, 995, 572, 473, 2114 )
AND `photo`.`gid` =1
Таблицы:
CREATE TABLE `randkey` (
`gid` int(8) NOT NULL,
`id_photo` int(8) NOT NULL,
`key` int(8) NOT NULL,
PRIMARY KEY (`id_photo`),
KEY `gid` (`gid`),
KEY `key` (`key`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251;
INSERT INTO `randkey` VALUES(1, 473, 680);
INSERT INTO `randkey` VALUES(1, 572, 777);
INSERT INTO `randkey` VALUES(1, 904, 514);
INSERT INTO `randkey` VALUES(1, 995, 976);
INSERT INTO `randkey` VALUES(26, 1786, 156);
INSERT INTO `randkey` VALUES(1, 2114, 1928);
INSERT INTO `randkey` VALUES(1, 2170, 1822);
INSERT INTO `randkey` VALUES(1, 2267, 2213);
INSERT INTO `randkey` VALUES(1, 2988, 2441);
CREATE TABLE `photo` (
`gid` int(4) NOT NULL,
`apid` int(8) NOT NULL auto_increment,
`pid` int(4) NOT NULL,
`aid` int(4) NOT NULL,
`author` varchar(50) NOT NULL,
`name` varchar(50) NOT NULL,
`desc` varchar(255) NOT NULL,
`date` datetime NOT NULL,
`editdate` datetime NOT NULL,
`view` int(10) NOT NULL default '0',
`file` varchar(50) NOT NULL,
`exif_ss` varchar(10) NOT NULL,
`exif_vdr` varchar(10) NOT NULL,
`exif_iso` int(4) NOT NULL,
`exif_camera` varchar(20) NOT NULL,
`exif_cameramodel` varchar(50) NOT NULL,
`exif_time` datetime NOT NULL,
`exif_width` int(4) NOT NULL,
`exif_height` int(4) NOT NULL,
`mfdraw` enum('da','net') NOT NULL,
`coment` int(8) NOT NULL,
PRIMARY KEY (`apid`),
KEY `gid` (`gid`,`aid`),
KEY `aid` (`aid`,`apid`),
KEY `bytime` (`aid`,`exif_time`),
KEY `photo` (`pid`,`aid`,`gid`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251
INSERT INTO `photo` VALUES(1, 473, 45, 11, '', '', '', '2008-08-05 17:00:40', '0000-00-00 00:00:00', 17, '080011966181767746131635621054', 'f/6.3', '10/1000', 200, 'Panasonic', 'DMC-FZ5', '2007-10-28 12:54:05', 1920, 2560, 'net', 0);
INSERT INTO `photo` VALUES(1, 572, 57, 12, '', '', '', '2008-08-05 17:09:28', '0000-00-00 00:00:00', 20, '432817091964784522481691711686', 'f/3.2', '10/250', 100, 'Panasonic', 'DMC-FZ5', '2007-11-08 14:18:53', 2560, 1920, 'net', 0);
INSERT INTO `photo` VALUES(1, 904, 42, 10, '', '', '', '2008-08-05 18:01:18', '0000-00-00 00:00:00', 31, '86971463633417166220802148025', 'f/3.0', '30416/1000', 128, 'OLYMPUS_IMAGING_CORP', 'X450,D535Z,C370Z', '2006-06-13 10:05:01', 1600, 1200, 'net', 0);
INSERT INTO `photo` VALUES(1, 995, 16, 16, '', '', '', '2008-08-05 18:08:32', '0000-00-00 00:00:00', 38, '404716490964166331521360865737', 'f/4.5', '6316/10000', 100, 'EASTMAN KODAK COMPAN', 'KODAK EASYSHARE C300 DIGITAL CAMERA', '0000-00-00 00:00:00', 2080, 1544, 'net', 0);
INSERT INTO `photo` VALUES(26, 1786, 27, 2, '', '', '', '2008-08-24 14:55:21', '0000-00-00 00:00:00', 37, '35398979929740014480814022069', '', '', 0, '', '', '2005-11-07 22:41:53', 178, 400, 'net', 0);
INSERT INTO `photo` VALUES(1, 2114, 60, 33, '', '', '', '2008-09-15 09:15:52', '0000-00-00 00:00:00', 53, '82905898890164586470345200879', 'f/2.8', '10/1250', 100, 'Panasonic', 'DMC-FZ18', '2008-09-13 17:21:20', 1840, 3264, 'net', 0);
INSERT INTO `photo` VALUES(1, 2170, 9, 32, '', '', '', '2008-09-15 09:24:36', '0000-00-00 00:00:00', 44, '6247752918827751761390941802', 'f/4.0', '10/2500', 100, 'Panasonic', 'DMC-FZ18', '2008-09-13 13:27:18', 3264, 1840, 'net', 0);
INSERT INTO `photo` VALUES(1, 2267, 28, 38, '', '', '', '2008-10-09 21:46:04', '0000-00-00 00:00:00', 41, '33116102675430831981859226105', 'f/5.0', '10/2000', 100, 'Panasonic', 'DMC-FZ18', '2008-10-09 17:48:12', 1840, 3264, 'net', 1);
INSERT INTO `photo` VALUES(1, 2988, 1, 42, '', '', '', '2008-11-03 21:15:38', '0000-00-00 00:00:00', 28, '38134822738793462269109774842', 'f/2.8', '10/600', 100, 'Panasonic', 'DMC-FZ18', '2008-11-03 09:47:01', 3264, 1840, 'net', 0);
EXPLAIN:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE randkey range PRIMARY,key key 4 NULL 10 Using where; Using index
1 SIMPLE photo eq_ref PRIMARY,gid PRIMARY 4 randkey.id_photo 1 Using where
Вот не понимаю почему в randkey range всплывает. Время выполнения запроса перманентно 0.0014-0.0025 что довольно много, учитывая что запрос впринципе не сложный. Помогите пожалуйста.
Отредактированно Proger (18.04.2009 21:16:10)