我想用php和mysql为新闻网站做一个快速的表格结构。我的数据库结构是ID、标题、内容、类别的cat_ids (;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-3 3GB,那么查询就会非常慢。我需要一些想法,使结构和选择更快。
发布于 2013-02-20 18:11:28
不使用cat_ids列,而是尝试使用news_id和cat_id创建一个news_cats表,并使用以下查询:
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-20 18:14:51
以下是一些建议:
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, 10https://stackoverflow.com/questions/14977060
复制相似问题