Php 新闻网站的SQL表结构

Php 新闻网站的SQL表结构,php,mysql,database,Php,Mysql,Database,我想用php和mysql为新闻站点创建一个快速的表结构。我的数据库结构是ID、title、content、cat_ID(;分类的separadet ID-;5;10;15;20;),active,publish_date 我想做一个快速查询,从这个表中选择新闻。诸如此类: SELECT id FROM news WHERE cat_ids LIKE '%;15;%' AND active = 1 AND publish_date < NOW() ORDER by publ

我想用php和mysql为新闻站点创建一个快速的表结构。我的数据库结构是ID、title、content、cat_ID(;分类的separadet ID-;5;10;15;20;),active,publish_date

我想做一个快速查询,从这个表中选择新闻。诸如此类:

SELECT id 
FROM news 
WHERE cat_ids LIKE '%;15;%' 
  AND active = 1 
  AND publish_date < NOW() 
ORDER by publish_date DESC 
LIMIT 0, 10
选择id
来自新闻
其中cat_id像“%”;15;%' 
和活动=1
并发布_date

但是如果我的表是2-3GB,查询速度会非常慢。我需要一些想法来构建结构并加快选择速度。

不要使用
cat\u id
列,尝试使用
news\u-cat
cat\u id
创建一个
news\u-cat
表,并使用此查询:

SELECT id 
FROM news JOIN news_cats ON news_id = id
WHERE cat_id = 15
  AND active = 1 
  AND publish_date < NOW() 
ORDER by publish_date DESC 
LIMIT 0, 10
选择id
从新闻加入新闻猫
其中cat_id=15
和活动=1
并发布_date
以下是一些建议:

1) 在
“活动”字段上创建索引
2) 在
“发布日期”
字段上创建索引
3) 为类别和新闻关系创建单独的表,并从新闻表中删除
“cat\u id”
字段

新表可能如下所示:

news\u category\u id

新闻id
类别识别码

对于每个新闻id,它可以有多行,如果新闻项属于3个类别,它将有3行

然后使用SQL,如下所示:

SELECT news.id 
FROM news INNER JOIN news_category_ids ON news.id =  news_category_ids.news_id
WHERE 1
  AND news.active = 1 
  AND news_category_ids.cat_id = 15
  AND news.publish_date < NOW() 
ORDER by news.publish_date DESC 
LIMIT 0, 10
选择news.id
从新闻内部加入news\u category\u id ON news.id=news\u category\u id.news\u id
其中1
和news.active=1
和新闻类别id.cat id=15
和news.publish_date
不要使用“LIKE”-它不使用索引。我必须使用用户LIKE,我使用索引:)@KostadinBuglow您必须使用LIKE吗?不,您必须规范化您的模式