2013-02-20 85 views
0

我想用php和mysql爲新聞網站創建一個快速的表結構。我的數據庫結構是ID,標題,內容,cat_ids(;分類標識的類別 - ; 5; 10; 15; 20;),active,publish_date。新聞網站的SQL表結構

我想做一個快速查詢來從這張表中選擇新聞。類似的東西:

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

創建索引。 – 2013-02-20 10:06:47

+2

請勿使用'LIKE' - 它不使用索引。 – DaveP 2013-02-20 10:07:23

+0

我必須用戶LIKE和我使用索引:) – 2013-02-20 10:10:11

回答

0

而不是使用cat_ids列,試着用news_idcat_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 
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