我想用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,则查询速度非常慢。我需要一些想法来制作结构并使选择更快。
答案 0 :(得分:0)
请尝试使用cat_ids
和news_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