Задавайте вопросы, мы ответим
Вы не зашли.
Debian написал:
-- Структура таблицы `tags`
--
CREATE TABLE IF NOT EXISTS `tags` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`image_id` int(10) unsigned NOT NULL,
`category_id` smallint(5) unsigned NOT NULL,
`tag` varchar(50) NOT NULL,
PRIMARY KEY (`id`),
KEY `image_id` (`image_id`),
KEY `category_id` (`category_id`),
KEY `tag` (`tag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
Задача:
Вы сами в исходной постановке задачи приводили такой вариант структуры. Тогда я указал на необоснованность такого дублирования, а сейчас уточнил, что для данного варианта оно нужно.
Неактивен
Аааа, вы сказали что лишнее, я и удалил, а что нужно добавить, не понял, сейчас добавлю, гляну что получится.
Неактивен
Я конечно не спец, как вы, но мне кажется, что мой вариант, работает лучше вашего, судя по результатам затронутых рядов, вот результат explain
Неактивен
Я извиняюсь, добавил индекс на category_id, но все равно результат хуже, как на мой взгляд. Может составной индекс сделать?
Неактивен
Попробуйте указать использовать индекс tag в подзапросе
http://sqlinfo.ru/forum/viewtopic.php?id=231
Неактивен
А куда этот FORCE INDEX tag вставлять?
Неактивен
в подзапросе
.. FROM tags FORCE ..
Неактивен
Что-то не работает
Неактивен
.. FROM tags FORCE INDEX (tag) ..
Неактивен
Все равно хуже
Неактивен
mysql> EXPLAIN SELECT i.id, i.title, i.upload_date FROM (SELECT DISTINCT image_id FROM tags FORCE INDEX (tag) WHERE image_id != 19 AND category_id = 6 AND tag IN('желтые', 'цветы', 'красивая', 'зелень') ORDER BY FIELD (tag, 'желтые', 'цветы', 'красивая', 'зелень'), image_id DESC LIMIT 3) t STRAIGHT_JOIN images i ON i.id\G
запрос не полностью привели
Неактивен
Прошу прощения, где-то потерял кусочек, вот теперь что:
Неактивен
Получается, что ваш вариант всеже лучше, один минус в том что пришлось добавить еще одно поле.
Спасибочки, буду обдумывать ваш подход.
Неактивен
Красота. Подзапрос дает всегда 3 уже отсортированные строки для каждой из которых есть 1 соответствие в таблице картинок (доступ по уникальному ключу).
В вашем случае выбираются все картинки данной категории (и с ростом базы их будет не 5), каждой из них соответствует несколько значений в результатах подзапроса, а потом ещё сортировать нужно прежде чем оставить 3 записи.
P.S. Главное, что нужно помнить: преждевременная оптимизация - зло.
Неактивен
Еще раз большое вам спасибо
Неактивен
Здравствуйте! Проверьте пожалуйста запросики Добавил в таблицу images и tags новое поле status, это сделано для того, чтобы у изображений были статусы, типа загружено успешно, ожидает модерации, и так далее. Естественно нужно и многие запросы переписывать, но на данный момент интересуют 2 запросика, которые мы с вами делали, хотя я бы сказал даже не мы а вы сделали Я внес изменения, но не уверен, что я это сделал правильно, хочу чтобы вы, проверили и одобрили.
Вот так теперь выглядят таблички:
Неактивен