我有两张桌子:

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/

10-12 01:28