例子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

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

09-10 22:34