Я предполагаю, что ваш столбец category
представляет собой список значений категории, например "12,34,45,78"?
Это не хороший дизайн реляционных баз данных. Одна из причин, по которой это не очень хорошо, как вы обнаружили: поиск подстроки, которая может появиться в середине этого списка, невероятно медленен.
Некоторые люди предлагают использовать полнотекстовый поиск вместо предиката LIKE
с подстановочными знаками, но в этом случае проще создать другую таблицу, чтобы вы могли перечислить одно значение категории в строке со ссылкой на вашу таблицу cute_news
:
CREATE TABLE cute_news_category (
news_id INT NOT NULL,
category INT NOT NULL,
PRIMARY KEY (news_id, category),
FOREIGN KEY (news_id) REFERENCES cute_news(news_id)
) ENGINE=InnoDB;
Тогда вы можете сделать запрос, и он будет работать намного быстрее:
SELECT n.`date`, n.title, c.category, n.url, n.comments
FROM cute_news n
JOIN cute_news_category c ON (n.news_id = c.news_id)
WHERE c.category = 45
ORDER BY n.`date` DESC