• 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 后面是右表的查询条件

  • 相关阅读:
    UEditor百度编辑器
    form提交
    EL表达式
    spring mvc <mvc;resources>
    filter 拦截ajax请求
    ORACLE 数据库的级联查询 一句sql搞定(部门多级)
    快速排序算法
    实时监听输入框值变化
    javaScript cookie 操作
    webUtil
  • 原文地址:https://www.cnblogs.com/mr-amazing/p/4819753.html
Copyright © 2020-2023  润新知