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

问题描述

我有一个新闻表,里面有一个字段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这样就搞定了,速度应该很快。

时间: 2025-01-21 14:56:27

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

PHP+Mysql树型结构(无限分类)数据库设计的2种方式实例_php技巧

我们经常需要在关系型数据库中保存一些树状结构数据,比如分类.菜单.论坛帖子树状回复等.常用的方法有两种: 1. 领接表的方式: 2. 预排序遍历树方式: 假设树状结构如下图: 领接表方式 主要依赖于一个 parent 字段,用于指向上级节点,将相邻的上下级节点连接起来,id 为自动递增自动,parent_id 为上级节点的 id.一目了然,"Java"是"Language"的子节点. 我们要显示树,PHP 代码也可以很直观,代码如下: 复制代码 代码如下: <

Access怎么删除这条新闻的的同时连同他的所有评论都删掉!

问题描述 conment是我的评论表,news是我的新闻内容表,category是我的新闻类别表,conment下的newsId(是int型)表示评论的是哪条新闻,他和news的id(是自动增长型)设了关系的,news下的caId(是int型)表示该新闻所属的是哪个类别的新闻,他和category的id(是自动增长型)设置了关系的!因为Access没有触发器,我在网上查说可以设置级联,这样好实现这样的功能,但是设置级联又因为他们的类型不一致而失败!那用程序控制的话也可以,但是我不会写啊,[img

中小型商城系统中的分类/产品属性/扩展属性的数据库设计

声明:之所以定位在"中小型"商城系统,而非"大型"(指淘宝.拍拍这类巨无霸),理由很简单----我一直都呆在(创业型的)小公司,没见过这些大家伙是怎么设计的:)   正文: 之前发表过一篇"商城系统中[商品扩展属性]的表单生成及客户端验证",部分童鞋对于后台数据库的设计比较感兴趣,于是今天把这部分也补上.   一.产品分类设计越来越多的商城系统都热衷于选择"无限级分类"的设计,我也不例外,因为它方便扩展.这部分就不详细展开了,

安卓 sqlitw数据库设计 多条记录

问题描述 安卓 sqlitw数据库设计 多条记录 安卓 每一项活动有多人参与 记录参与人的姓名怎样设计数据库 可以使得根据人的名称来获取参与的所有记录更方便 解决方案 额..这个跟是不是安卓,以及是什么DB,应该没关系吧.1.活动表(活动id,xxxxxxx)2.人员表(人员id,xxxxxxxxx)3.活动参与 人员表(活动id,参与人id) 多对多的 查记录只要查"活动参与 人员表"就可以了,当然,数据量有可能会比较大,那么还有个方案2.1.不变2.不变3.活动参与人员表(活动id

有没有什么进度条控件并且数据可以从数据库里面来

问题描述 有没有什么进度条控件并且数据可以从数据库里面来 如题,求大神介绍一个进度条控件并且跟数据库相连的,拜托拜托,可以的话教一下怎么使用,毕不了业了 解决方案 就用标准的ProcessBar就可以了,将数据从数据库读取后,设置给Value属性. 解决方案二: processBar.Value = 你读出来的值;

大数据-2000万条开房数据,如何快速查询(数据库优化)

问题描述 2000万条开房数据,如何快速查询(数据库优化) 某酒店泄漏 2000 万条数据.http://kfxx.info/ 如何快速查询某个姓名的全部记录. 姓名不是唯一的,有可能重名. csv 格式数据大概 3G 大小,如果导入数据库中,大概1.5G(MySQL),而且 2000万也不是个小数目. 解决方案 索引啊,这还有什么好想的,如果你知道表结构的话,如果没有导数据库,放在linux上用cat | grep也可以 如果你舍得花时间,你可以把数据整个重构一遍,按照姓名或者其他的查询字段做

新闻-教务网站信息发布系统的数据库设计

问题描述 教务网站信息发布系统的数据库设计 教务网站信息发布系统需求分析 一.新闻发布 普通富文本编辑器(百度UEditor等).格式字符经过转义以后储存在数据库中. 允许上传图片.图片采用文件格式储存,不用数据库储存. 允许上传附件(一个),限制格式. 允许自定义排序,采用排序号. 允许设置所属专题. 允许设置标题链接:设置后,点击不进入内容页面,直接进入设置的链接. 置顶方式:采用排序号. 二.栏目管理 只有超级管理员具有栏目管理权限. 新闻最多分为三级栏目.(或者以设置父栏目的形式实现多级

mysql-php从数据库中读取某个表中的数据并在页面中一条条列出来,代码如下,数据库里有信息,显示不出来

问题描述 php从数据库中读取某个表中的数据并在页面中一条条列出来,代码如下,数据库里有信息,显示不出来 <?php include(""connectDB.php""); @$query=mysql_query($conSELECT * from xx""); @$result=mysql_fetch_array(@$query); if($result==true){ ?> <table width=""

easyui-Easyui 的datagrid 用appendRow加数据时200多条用了40多秒?有人能解决吗?

问题描述 Easyui 的datagrid 用appendRow加数据时200多条用了40多秒?有人能解决吗? Easyui 的datagrid 用appendRow加数据时200多条用了40多秒?效率超低....有人能解决吗? 解决方案 html 和数据文件json提供下,才好做调试 解决方案二: http://www.tc5u.com/webdev/833906.htm