zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    BZOJ3790 : 神奇项链
    BZOJ3630 : [JLOI2014]镜面通道
    BZOJ3738 : [Ontak2013]Kapitał
    个人总结
    mac 下的 top 命令
    去掉Xcode源码末尾的空格
    让UILabel的文字顶部对齐
    使用RBTool自动提交code review请求
    不要在init和dealloc函数中使用accessor
    将textField编辑完内容作为参数发送请求
  • 原文地址:https://www.cnblogs.com/ccdc/p/3630680.html
Copyright © 2011-2022 走看看