Vika
Новичок
оптимизация JOIN для системы тегов
Нужно реализовать систеиу тегов.
Есть 2 таблицы :
1. Таблица связей тегов и новостей
CREATE TABLE `rdm_tags2news` (
`tn_id_news` int(10) NOT NULL default '0',
`tn_id_tag` int(10) NOT NULL default '0',
PRIMARY KEY (`tn_id_news`,`tn_id_tag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2. Таблица новостей
CREATE TABLE `rdm_news` (
`nw_id` int(10) unsigned NOT NULL auto_increment,
`nw_country_ref` int(10) default NULL,
`nw_status` tinyint(1) unsigned NOT NULL default '0',
PRIMARY KEY (`nw_id`),
KEY `nw_country_ref` (`nw_country_ref`,`nw_status`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT;
nw_status - статус новости: активная или заблокированная
nw_country_ref - страна: россия, украина
Нужно показать все активные новости одной страны с выбранными тегами (например массив тегов).
запрос с LEFT JOIN работает очень долго и вешает систему.
SELECT n.* FROM rdm_news as n
LEFT JOIN rdm_tags2news as t2n
ON n.nw_id = t2n.tn_id_news
WHERE (tn_id_tag = 806||tn_id_tag = 878) && (n.nw_country_ref = 1) && (n.nw_status = 2) GROUP BY n.nw_id
ORDER BY n.nw_id
DESC LIMIT 30
Можно придумать замену LEFT JOIN?
Нужно реализовать систеиу тегов.
Есть 2 таблицы :
1. Таблица связей тегов и новостей
CREATE TABLE `rdm_tags2news` (
`tn_id_news` int(10) NOT NULL default '0',
`tn_id_tag` int(10) NOT NULL default '0',
PRIMARY KEY (`tn_id_news`,`tn_id_tag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2. Таблица новостей
CREATE TABLE `rdm_news` (
`nw_id` int(10) unsigned NOT NULL auto_increment,
`nw_country_ref` int(10) default NULL,
`nw_status` tinyint(1) unsigned NOT NULL default '0',
PRIMARY KEY (`nw_id`),
KEY `nw_country_ref` (`nw_country_ref`,`nw_status`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT;
nw_status - статус новости: активная или заблокированная
nw_country_ref - страна: россия, украина
Нужно показать все активные новости одной страны с выбранными тегами (например массив тегов).
запрос с LEFT JOIN работает очень долго и вешает систему.
SELECT n.* FROM rdm_news as n
LEFT JOIN rdm_tags2news as t2n
ON n.nw_id = t2n.tn_id_news
WHERE (tn_id_tag = 806||tn_id_tag = 878) && (n.nw_country_ref = 1) && (n.nw_status = 2) GROUP BY n.nw_id
ORDER BY n.nw_id
DESC LIMIT 30
Можно придумать замену LEFT JOIN?