zoukankan      html  css  js  c++  java
  • 号外,left join比连表语句快80倍

    理论上,这两句话是等价的:

    SELECT * FROM inscription_pan 
    LEFT JOIN facture_pan
    ON  (ins_id=fc_inscription)
    AND (ins_ecole=fc_ecole)
    WHERE (ins_date>='2013-06-01')
    AND (ins_date<='2013-06-11')
    and (ins_operateur_id=74)

    等价于

    SELECT * FROM inscription_pan , facture_pan
    where  (ins_id=fc_inscription)
    AND (ins_ecole=fc_ecole)
    and (ins_date>='2013-06-01')
    AND (ins_date<='2013-06-11')
    and (ins_operateur_id=74) 

    但是前者执行需要0.25秒,后者需要20.547秒。得出却是相同的结果。80倍都不止。

    原因我想可能是因为前者是简单的一对多的关系,以左边为准,只要补充右边的数据即可;而后者是多对多的关系,因而有无穷多的可能性,需要一一演算。但是具体对于这个业务来说,不存在多对多的关系,基本上也是1对多的关系。所以非常快速。

    真正的原因:除了对应关系以外,WHERE语句三个条件都是inscription的。因此前者SQL先排除,后对应;后者SQL先对应,后排除,数据量大大增加。

    额外的总结:Left join=笛卡尔乘积+对应不到的数据用NULL显示

  • 相关阅读:
    套题 codeforces 361
    hdu 5720
    套题 codeforces 360
    套题 codeforces 359
    套题 bestcoder 84
    hdu 5748(求解最长上升子序列的两种O(nlogn)姿势)
    观django-messages包笔记
    django form
    省份、城市、区县三级联动Html代码
    django perm用法
  • 原文地址:https://www.cnblogs.com/findumars/p/3132033.html
Copyright © 2011-2022 走看看