热搜:NVER node 开发 php

做表的关联时在每个查询后面加条件和在所有关联完后加条件哪个快

2024-07-24 20:00:01
做表的关联时在每个查询后面加条件和在所有关联完后加条件哪个快

例子1:SELECT * FROM contact_card AS c
                   INNER JOIN contact_card_extend AS b ON c.uuid = b.uuid AND  c.uuid='AX61t09bpcmmhsXISvbAv1mdb71JZwt3' AND c.status='active'
                   INNER JOIN contact_card_vcardinfo AS info ON c.uuid=info.card_id;

例子2:SELECT * FROM contact_card AS c
                   INNER JOIN contact_card_extend AS b ON c.uuid = b.uuid 
                   INNER JOIN contact_card_vcardinfo AS info ON c.uuid=info.card_id
                   WHERE  c.uuid='AX61t09bpcmmhsXISvbAv1mdb71JZwt3' AND c.status='active'


回复讨论(解决方案)

两者一样
不过一般都写成后者,因为 c.uuid='AX61t09bpcmmhsXISvbAv1mdb71JZwt3' AND c.status='active' 与连接无关

两者一样
不过一般都写成后者,因为 c.uuid='AX61t09bpcmmhsXISvbAv1mdb71JZwt3' AND c.status='active' 与连接无关


就是这样子

就大数据来说不知道前者是不是更快点,就理论来说前者是先通过第一个查询的出的结果来进行关联,而第一个查询已经进行了条件筛选,所以应该是要比第二个所有查询关联完之后再进行条件筛选快。我想应该是这样没有试所以就来问问。

那只是你的想象而已
数据库中有一个专门用来解析 join 命令的过程,解析时对于与连接无关的表达式都剔出来放到 where 子句中

如果你只想让主表符合条件的记录参与查询,应使用子查询
SELECT * FROM
                   (select * from contact_card where uuid='AX61t09bpcmmhsXISvbAv1mdb71JZwt3' AND status='active') AS c
                   INNER JOIN contact_card_extend AS b ON c.uuid = b.uuid
                   INNER JOIN contact_card_vcardinfo AS info ON c.uuid=info.card_id

受教了,谢谢大神儿!已经改正错误!