0

我想用 php 和 mysql 为新闻网站制作一个快速的表结构。我的数据库结构是 ID、标题、内容、cat_ids(;分类的分隔 ID - ;5;10;15;20;)、活动、发布日期。

我想进行快速查询以从该表中选择新闻。像这样的东西:

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,那么查询会很慢。我需要一些想法来构建结构并使选择更快。

4

2 回答 2

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
于 2013-02-20T10:14:50.790 回答
0

不要使用cat_ids列,而是尝试使用 and 创建一个表news_cats,并使用以下查询:news_idcat_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
于 2013-02-20T10:11:27.517 回答