问题描述
我有一个新闻表,里面有一个字段catalog,里面存放新闻所属的多个分类,例如01,03,05。那么我在显示分类为01的新闻时sql语句应当这么写:select title from news where catalog like '%03,%'。但当数据量有几十万条时,查询速度会慢一些,如果我按F5刷页面,不到一分钟,数据库服务器的CPU就高达100%。请问大家是怎么处理这样的问题的?优化SQL,这觉得这个好像行不通,还是在数据库设计上作一下改善。目前在作门户,困扰我很长时间了,谢谢大家的帮助。 问题补充:xieye 写道
解决方案
新闻分类表: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的所有新闻
解决方案二:
使用exists相比等号的效率要低
解决方案三:
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.
解决方案四:
建议再建一张新闻分类表
解决方案五:
这个问题很简单,你的表没有建好。你再建一张新闻分类表,只有两个字段news_id, catalog这样就搞定了,速度应该很快。