Более быстрый метод MySQL для этого запроса, используя IN с проверкой на счет?
Я работаю с видеобазой, которая связана с тегами. Когда я выполняю этот запрос, мне нужно долго ждать, он создает временную таблицу и тому подобное, но я думаю, что это должно быть быстрее:
EXPLAIN SELECT SQL_NO_CACHE `video_id`
FROM `video_tag_link`
WHERE `tag_id`
IN (
'2752', '36370'
)
GROUP BY `video_id`
HAVING COUNT( `video_id` ) =2
LIMIT 0 , 20
MySQL Result: 1
SIMPLE
video_tag_link
range
PRIMARY,video_id
PRIMARY
4
NULL
300268
Using where; Using index; Using temporary; Using filesort
Mysql table
CREATE TABLE IF NOT EXISTS `video_tag_link` (
`video_id` int(10) unsigned NOT NULL,
`tag_id` int(10) unsigned NOT NULL,
PRIMARY KEY (`tag_id`,`video_id`),
KEY `video_id` (`video_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Total of 45mil records in this table.
Кто-нибудь, кто может помочь мне с этим запросом?
1 ответ
Можете ли вы попробовать с идентификаторами тегов как целые числа
EXPLAIN SELECT SQL_NO_CACHE `video_id`
FROM `video_tag_link`
WHERE `tag_id`
**IN (2752, 36370)**
GROUP BY `video_id`
HAVING COUNT( `video_id` ) =2
LIMIT 0 , 20