mysql left join视图_为什么Left join一张视图和直接把查询语句拆出来,效率差10倍...

表关系

单据表:jd,id主键,记录数5XX条

流程进度表:lcdj,id主键,jd_id(指向单据表的id,但是没有设置外键),status(状态:0正常,-1删除),其他lcjd_id(流程进度id,对应code表id==lcjd.id的名称),记录数22xx条

流程进度视图:v_cljd,对lcjd表中的lcjd.id代码用left join进行翻译

当前流程进度视图:select * from v_cljd where status=0,即v_lcjd中status=0的记录。

执行时间如下:

SELECT jd.id FROM jd LEFT JOIN v_dqlcjd ON jd.id = v_dqlcjd.jd_id

耗时 0.99

SELECT jd.id FROM jd LEFT JOIN v_lcjd ON jd.id = v_lcjd.jd_id where v_lcjd.`status` = 0

耗时0.006

mysql> show profiles;

+--+--+--+

| Query_ID | Duration   | Query                                                                                   |

+--+--+--+

|        1 | 0.99802075 | SELECT jd.id FROM jd LEFT JOIN v_dqlcjd ON jd.id = v_dqlcjd.jd_id                       |

|        2 |  0.0015355 | explain SELECT jd.id FROM jd LEFT JOIN v_dqlcjd ON jd.id = v_dqlcjd.jd_id               |

|        3 |   0.006792 | SELECT jd.id FROM jd LEFT JOIN v_lcjd ON jd.id = v_lcjd.jd_id where v_lcjd.`status` = 0 |

+--+--+--+

3 rows in set

mysql> explain SELECT jd.id FROM jd LEFT JOIN v_dqlcjd ON jd.id = v_dqlcjd.jd_id ;

+--+--+--+--+--+--+--+--+--+--+

| id | select_type | table | type   | possible_keys   | key             | key_len | ref             | rows | Extra       |

+--+--+--+--+--+--+--+--+--+--+

|  1 | SIMPLE      | jd    | index  | NULL            | PRIMARY         | 4       | NULL            |  567 | Using index |

|  1 | SIMPLE      | lcjd  | ref    | IND_LCJD_STATUS | IND_LCJD_STATUS | 5       | const           |   10 |             |

|  1 | SIMPLE      | clcjd | eq_ref | PRIMARY         | PRIMARY         | 4       | fz.lcjd.lcjd_id |    1 | Using index |

+--+--+--+--+--+--+--+--+--+--+

3 rows in set

mysql> explain SELECT jd.id FROM jd LEFT JOIN v_lcjd ON jd.id = v_lcjd.jd_id where v_lcjd.`status` = 0  ;

+--+--+--+--+--+--+--+--+--+--+

| id | select_type | table | type   | possible_keys   | key             | key_len | ref             | rows | Extra                    |

+--+--+--+--+--+--+--+--+--+--+

|  1 | SIMPLE      | lcjd  | ref    | IND_LCJD_STATUS | IND_LCJD_STATUS | 5       | const           |  594 | Using where              |

|  1 | SIMPLE      | jd    | eq_ref | PRIMARY         | PRIMARY         | 4       | fz.lcjd.jd_id   |    1 | Using index              |

|  1 | SIMPLE      | clcjd | eq_ref | PRIMARY         | PRIMARY         | 4       | fz.lcjd.lcjd_id |    1 | Using where; Using index |

+--+--+--+--+--+--+--+--+--+--+

3 rows in set

为什么会有这样的差距?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值