目前我有兩個表,一個keywords和一個news表。keyword存放關鍵詞是從news中提取,通newsid進行關聯,兩表關系如圖:
keywords中存有20萬條數據,news中有2萬條數據,現在我要查查關鍵詞為“北京”對應的新聞條目,查詢思路如下:
1、從keywords中查找出關鍵詞為“北京”的數據,通過distinct去重,然后關聯news表,找出相應的news;
2、將keywors和news進行關聯,然后通過查詢關鍵詞為“北京”的條目,並通過distinct去重。
最后查出來的結果為383條。
想象的查詢第一種查詢快,先找出383條再去與news進行連表,可能連表查詢的數據會少一些會快。實際通過mysql的explain進行了驗證,第二中查詢更快,結果如下:
explain ( select news.* from (select distinct(articleid) from keywords where keyword = "北京") as tkeyword left join news on tkeyword.articleid = news.news_id order by news_date desc ); explain( select distinct(articleid) from keywords left join news on keywords.articleid = news.news_id where keyword = "北京" order by news_date desc );
第一種查詢多執行了一步,一共3步:
第二種查詢一種執行了2步:
查詢結果都是383條,第一種使用時間0.171sec,第二種使用時間0.156sec