我正在使用mysql,我可以通过两种方式查询(或/和) 这意味着我可以将查询写为: select * from x where()或()或()。 。 ..; 或者我可以这样写: select * from x where()和()and()。 。 ..;
哪个更好?有任何性能问题吗?
答案 0 :(得分:2)
忘记性能以及什么是“首选”,您需要使用or
,and
,具体取决于您对查询的要求。这是使用真值表的基本boolean logic。 select * from x where () or () or ()
与select * from x where () and () and ()
非常不同。
答案 1 :(得分:2)
这怎么可能是一个表现的东西 - 因为两个查询的工作方式不同?
如果你有where () or () or ()
;如果满足任何条件,则返回结果
如果你有where () and () and ()
;只有满足所有条件时才会返回结果。
答案 2 :(得分:0)
您的样本谓词在语义上并不等同,所以我想知道您是否过度简化或忘记提及否定?例如更像是这样的东西:
WHERE (NOT col1 = 'T') OR (NOT col2 = 'T') OR (NOT col3 = 'T');
与
相同 WHERE NOT (col1 = 'T' AND col2 = 'T' AND col3 = 'T');
如果是这样,我认为@darioo在评论中所说的是答案,即引擎会在其认为合适的情况下解释正确的布尔逻辑,并且可能不值得担心。你的工作是确保你的候选人构建你将进行性能测试确实在语义上等同于:)