关于一条新闻属于多个分类的数据库设计解决办法,like太慢。

问题描述:

我有一个新闻表,里面有一个字段catalog,里面存放新闻所属的多个分类,例如01,03,05。

那么我在显示分类为01的新闻时sql语句应当这么写:select title from news where catalog like '%03,%'。

但当数据量有几十万条时,查询速度会慢一些,如果我按F5刷页面,不到一分钟,数据库服务器的CPU就高达100%。

请问大家是怎么处理这样的问题的?优化SQL,这觉得这个好像行不通,还是在数据库设计上作一下改善。

目前在作门户,困扰我很长时间了,谢谢大家的帮助。

新闻分类表:news_catalog
新闻分类表字段:news_id,catalog
新闻表:news
新闻表字段:id,title 。。。。
记住要给news_catalog的news_id字段加索引

select news.*
from news
where exists(
select 1 from news_catalog
where news_catalog.news_id = news.id
and news_catalog.catalog = 2
)

2就是一个分类
查找类型为2的所有新闻

=====================

select news.*
from news
where exists(
select 1 from news_catalog
where news_catalog.news_id = news.id
and news_catalog.catalog in (2,3)
)
查找类型为2或者3的所有新闻

这个问题很简单,你的表没有建好。

你再建一张新闻分类表,只有两个字段

news_id, catalog

这样就搞定了,速度应该很快。

建议再建一张新闻分类表

select title from news where catalog = '社会';
或者
select title from news where catalog_id = (select catalog_id from 新闻分类 where catalog = '社会');

如果是第一条语句,不用修改news表的表结构,不过这样的设计并不好。
建议你把news表的catalog改成catalog_id.用第二条语句就好了!
新闻分类表的两个字段catalog_id,catalog.

使用exists相比等号的效率要低