新闻站点的SQL表结构

时间:2013-02-20 10:04:32

标签: php mysql database

我想用php和mysql为新闻网站制作快速表结构。我的数据库结构是ID,标题,内容,cat_ids(;分类的separedet 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

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

2 个答案:

答案 0 :(得分:0)

请尝试使用cat_idsnews_cats创建news_id表,并使用此查询,而不是使用cat_id列:

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

答案 1 :(得分:0)

一些建议如下:

1)在"active"字段上创建索引
2)在"publish_date"字段上创建索引
3)为类别和新闻关系创建单独的表,并从新闻表中删除"cat_ids"字段

新表格可能如下所示:

news_category_ids

news_id
CATEGORY_ID

每个news_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