确定连接表是否包含1个或多个匹配的行。有没有比GROUP BY和COUNT更好的方法?

时间:2011-12-21 16:13:00

标签: mysql optimization join group-by

我将表A连接到表B,并且需要知道表B是否有1个匹配的行或多个。

当然,我可以使用GROUP BY和COUNT来做,但这是一种矫枉过正,因为它必须计算所有匹配,我不需要这些信息。

有没有一种简单的方法来获取我需要的信息(只有一个匹配的行或更多),这会使评估短路并在知道答案时停止而不扫描并计算所有剩余的匹配项?

或者我不应该关心这一点,因为它不是一个很大的性能影响我应该只用COUNT吗?

2 个答案:

答案 0 :(得分:0)

这实际上取决于数据库的大小和您的确切要求。通常,count()/ Group By / Having组合是一个非常有效的查询,具有正确的索引。您可以以更复杂的方式执行此操作,例如,在更新后触发更新以使计数表更新。

您是否看到计数(*)/组/有组合可以解决性能问题?

答案 1 :(得分:0)

如果您只需要知道某个连接sql是否有一行或多行,则表示匹配的行:

-- Without any sample SQL code, here's a return sample
SELECT B.SOMEJOINAPPLICABLECOLUMN
FROM A 
LEFT OUTER JOIN B
    ON A.SOMEJOINAPPLICABLECOLUMN = B.SOMEJOINAPPLICABLECOLUMN
WHERE 
    B.SOMEJOINAPPLICABLECOLUMN IS NOT NULL 
LIMIT 2;

自然地:

2 returned rows = more than one match
1 returned row  = one match
0 returned rows = no matches