MySQL 中聯合查詢效率分析


  目前我有兩個表,一個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

 

 

 

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM