我有两张桌子:
TABLE tb1
id int(11)
col1 int(11)
PRIMARY (id)
TABLE tb2
id int(11)
col2 int(11)
tb1_id int(11)
PRIMARY (id)
INDEX (tb1_id)
UNIQUE (col2, tb1_id)
我正试图在
tb1
中获取行,其中col1 = 123
,然后检查
[col2=456, tb1_id=<tb1 id>]
中是否存在唯一的对tb2
。我可以两个选择:
SELECT tb1.*
FRoM tb1
WHERE tb1.col1 = 123
foreach <tb1 id> in results
SELECT COUNT(*)
FROM tb2
WHERE tb2.col2 = 456 AND tb2.tb1_id = <tb1 id>
或使用左连接
SELECT tb1.*, COUNT(tb2.id)
FROM tb1
LEFT JOIN tb2 ON tb2.tb1_id = tb1.id
WHERE tb1.col1 = 123 AND tb2.col2 = 456
GROUP BY tb1.id
哪个更快?
最佳答案
连接速度更快,请在查询开始前使用explain关键字,您将了解mysql如何对数据库执行查询的时间统计和其他因素。
例如
EXPLAIN SELECT tb1.*, COUNT(tb2.id)
FROM tb1
LEFT JOIN tb2 ON tb2.tb1_id = tb1.id
WHERE tb1.col1 = 123 AND tb2.col2 = 456
GROUP BY tb1.id
谢谢
阿米特
关于mysql - 多个查询或LEFT JOIN更快?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34389140/