weixin_42396603 2010-09-07 18:30
浏览 756
已采纳

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

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

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

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

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

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

  • 写回答

5条回答 默认 最新

  • xieye114 2010-09-08 11:01
    关注

    新闻分类表: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的所有新闻

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用