zoukankan      html  css  js  c++  java
  • mysql 子查询优化

    今天用到要查询七天内都没有装机的门店信息,首先想到了用not in,先把装机的userid查出来,然后再id not in,但是这样就必须使用子查询,数据量少还可以,数据量大了的话,肯定效率特别低,因为MySQL需要为内层查询语句的查询结果建立一个临时表。然后外层查询语句再临时表中查询记录。查询完毕后,MySQL需要撤销这些临时表。因此,子查询的速度会受到一定的影响。如果查询的数据量比较大,这种影响就会随之增大。

    首先使用:

    select * from v9_wba_account where levels = 3 and id not in(select distinct userid from v9_wba_dev where days > 20150917)

    然后尝试:

    select * from v9_wba_account as user left join v9_wba_dev as dev on user.id=dev.userid where levels = 3

    由于 LEFT JOIN 即使不满足 user.id=dev.userid 这个条件,也会把左表中的数据都查询出来,但是结果中 右表中的字段都是NULL而已

    最后:

    select * from v9_wba_account as user left join v9_wba_dev as dev on user.id=dev.userid where levels = 3 and dev.id is NULL

    最后再排除下右表不为 null 的就是正确的了

    select * from v9_wba_account as user left join v9_wba_dev as dev on user.id=dev.userid and dev.days >= 20150918 where levels = 3  and dev.id is NULL;

    ON 后面是右表的查询条件

  • 相关阅读:
    电子商务测试点总结
    pc 端 测试点总结
    web测试点总结
    Monkey脚本API
    Git 命令
    配置samba的流程
    scrapy使用指南
    链接
    顺序表总结
    python数据类型——字符串类型
  • 原文地址:https://www.cnblogs.com/mr-amazing/p/4819753.html
Copyright © 2011-2022 走看看