首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >哪个在MySQL,一个IFNULL或or逻辑中更好?

问哪个在MySQL,一个IFNULL或or逻辑中更好?
EN

Stack Overflow用户
提问于 2017-06-10 14:07:43
回答 1查看 62关注 0票数 0

我已经将deleted列添加到许多表中,并且我有一个查询,该查询在9个表中保留联接,并希望检查每个表的deleted列。

由于工作流的原因,我将已删除的列设置为TINYINT,而不是为了某种灵活性而使之具有多个“删除”值。我想要空或零的意思是“不删除”,任何其他非空,非零值的意思是“删除”。我可以在WHERE子句中看到两种方法:

代码语言:javascript
复制
WHERE (k.deleted IS NULL OR k.deleted = 0) 
   AND (c.deleted IS NULL OR c.deleted = 0)
   ... 

或者另一种

代码语言:javascript
复制
WHERE IFNULL(k.deleted,0) = 0
   AND IFNULL(c.deleted,0) = 0
   ... 

在这个查询中,效率非常重要,因为它是一个返回零或一条记录的9表左联接,而且它运行了很多,所以我真的需要最大的效率。我认为IFNULL看起来更优雅,但我觉得MySQL可能会在WHERE子句中使用与AND / OR逻辑不同的函数来优化查询。除非我听到另一种说法,否则我将使用更详细的“或”形式,只是为了安全起见。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-10 14:11:24

它们都会非常糟糕,因为它们都排除了索引。一种建议是缺省值,因此它是0而不是NULL。这至少会使WHERE子句能够使用索引。这个查询更优化,因为它可以使用索引:

代码语言:javascript
复制
WHERE k.deleted = 0 AND c.deleted = 0

为了清晰起见,我将使用ANSI标准COALESCE()而不是IFNULL()。我个人更喜欢OR,因为我认为它更清晰。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44474250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档