为什么IS NOT NULL条件比IFNULL(col,'')<>''

时间:2018-06-20 10:10:42

标签: mysql sql hibernate join mariadb

我有一个由几个表联接组成的sql查询,并以对NULL条件进行检查的WHERE子句结尾。查询如下:-

查询1

Select * from TableA ta INNER JOIN TableB tb ON ta.id = tb.id
LEFT OUTER JOIN TableC tc ON ta.id = tc.txn_id
LEFT OUTER JOIN TableD td ON tc.sr_no = td.sr_id
LEFT OUTER JOIN TableE te ON te.name = td.name
WHERE tc.status IS NOT NULL

上面的查询工作非常缓慢,但是使用IFNULL条件稍微重新构架查询可以解决此问题。上面的查询稍作修改如下:-

查询2

Select * from TableA ta INNER JOIN TableB tb ON ta.id = tb.id
LEFT OUTER JOIN TableC tc ON ta.id = tc.txn_id
LEFT OUTER JOIN TableD td ON tc.sr_no = td.sr_id
LEFT OUTER JOIN TableE te ON te.name = td.name
WHERE IFNULL(tc.status,'') <>''

我的问题是:-

1)为什么查询1花费太多时间,而查询2却很快给出结果?

2)通过使用Restrictions.isNotNull(“ aliasName.colName”),根据休眠的限制条件创建查询1。那么是否有一种方法可以通过休眠限制来应用非空的相同条件,但是没有isNull方法呢? (以便最终生成查询2)

3)在同一查询中,如果我删除NOT条件,则可以正常工作。那么为什么IS NULL条件工作得很好,而IS NOT NULL却花费了太多时间才能得出结果,即IS NULL和IS NOT NULL的行为为何如此不同?

P.S。我在JOIN /条件检查中使用的所有列上使用索引。而且我正在使用mariaDB,它与mySQL非常相似。

我们非常感谢您的帮助!

0 个答案:

没有答案