ISNULL()在使用LEFT JOIN时是IS NULL性能

时间:2013-02-19 13:29:40

标签: mysql query-optimization database-performance

sub1和sub2与super有一对一的关系。

我希望确定对于给定的超级记录是否存在其中任何一个的连接。

以下两个查询应该产生我想要的结果。有没有理由使用!ISNULL()与IS NOT NULL?

SELECT super.*
FROM super
LEFT OUTER JOIN sub1 ON super.id=sub1.super_id
LEFT OUTER JOIN sub2 ON super.id=sub2.super_id
WHERE (!ISNULL(sub1.id) OR !ISNULL(sub2.id)) AND super.id=123;

SELECT super.*
FROM super
LEFT OUTER JOIN sub1 ON super.id=sub1.super_id
LEFT OUTER JOIN sub2 ON super.id=sub2.super_id
WHERE (sub1.id IS NOT NULL OR sub2.id IS NOT NULL) AND super.id=123;

1 个答案:

答案 0 :(得分:1)

使用您的第二个选择(IS NOT NULL)。查询优化器可能会或可能不会帮助您提高第二个查询的效率。但查询优化器不执行功能。它假定它必须评估您为所有可能的行和列提供的任何函数;它并不试图推断出函数的含义。