Вы не зашли.
Страницы 1
Посмотрев бегло код и структуру базы, к сожалению увидел, что для возможности указания нескольких категорий у поста используется поле, в котором перечисляются идентификаторы категорий через запятую.
Проблема начинается при большом количестве новостей, когда по определённой категории требуется показать новости используется mysql запрос с регулярным выражением
`catid` regexp [[:<:]](идешник_категории)[[:>:]]
. Такой запрос выполняется довольно долго. Причём проблему не решит даже простановка ключа для поля `catid`, так как в подобных запросах ключи не используются.
Данная проблема существует, также и в DLE и в 2z. В ДЛЕ попытались её решить довольно просто: не хочешь, чтобы сайт тормозил - не ставь для новости несколько категорий - тогда будет вместо запроса:
`catid` regexp [[:<:]](идешник_категории)[[:>:]]
использоваться запрос вида:
`catid`='идешник_категории'
тогда в запросе будет участвовать ключ. Но это лишает возможнсти указывать несколько категорий для новости.
Мне кажется, было бы правильнее хранить соответствия `ид_новости` => `ид_категории` в отдельной табличке с ключом по `ид_категории`. Благодаря этому при показе новостей из выбранной категории будет использоваться ключ и такой запрос будет выполняться значительно быстрее.
Изменено FDVFlex (2009-03-27 09:34:26)
Не в сети
Всё верно.
В SVN версии уже создана таблица PREFIX_news_map:
CREATE TABLE `PREFIX_news_map` (
`newsID` int(11) default NULL,
`categoryID` int(11) default NULL,
KEY `newsID` (`newsID`),
KEY `categoryID` (`categoryID`)
) ENGINE=MyISAM;
Она как раз и будет использоваться для маппинга.
В коде её поддержка реализована пока лишь частично.
Не в сети
Страницы 1