SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 18.05.2009 21:20:42

Ufai
Участник
Зарегистрирован: 18.05.2009
Сообщений: 2

Прошу помочь с оптимизацией подзапроса

В общем, история такая. Допустим у нас есть таблица новостей. И есть таблица тегов к новостям. К каждой новости может быть несколько тегов, у некоторых новостей некоторые теги могут совпадать. Нам нужно, допустим, селектировать все новости с тегами 1, 2. Делаем так:

SELECT * FROM news WHERE news_id IN (SELECT news_id FROM tags WHERE tag='1' AND news_id IN (другой подзапрос))
 


В общем, даже 2 таких подзапроса страшно медленно выполняются при объеме тегов в пару тысяч... я уже молчу, что будет при 3-х подзапросах. Есть у кого-то какие-то мысли на этот счет? Если нужно 4-5 тегов общих найти, то как быть?
Спасибо заранее.

Неактивен

 

#2 19.05.2009 03:24:28

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Прошу помочь с оптимизацией подзапроса

Честно говоря, не понял, что стоит в «другом подзапросе».

Новости, в которых есть и тег1, и тег2, можно выбрать обычными объединениями.

SELECT news.*
FROM news n, tags t1, tags t2
WHERE t1.tag = '1' AND t2.tag = '2' AND t1.news_id = t2.news_id AND n.news_id = t1.news_id


Разумеется, нужны ключики на tags.news_id, tags.tag, news.news_id.

Неактивен

 

#3 20.05.2009 06:09:18

Ufai
Участник
Зарегистрирован: 18.05.2009
Сообщений: 2

Re: Прошу помочь с оптимизацией подзапроса

Точно!
Вот этого я и не знал... как за один запрос  обратиться к одной и той же базе несколько раз, но с разными условиями. Спасибо большое )

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson