是MySQL逻辑运算符XOR等价或否定

时间:2016-05-28 12:52:18

标签: mysql performance logical-operators

这些查询之间的结果和性能是否存在差异?

SELECT a.id FROM table a WHERE (C1 = 'value' XOR C2 = 'value');

SELECT a.id FROM table a WHERE (C1 != 'value' OR C2 !='value');

4 个答案:

答案 0 :(得分:2)

XOR不等同于OR否定。 XOR等同于以下逻辑:

WHERE ((c1 = 'value' AND c2 = 'value') OR
       (c1 <> 'value' AND c2 <> 'value') 
      )

有趣的是,你的第二个表达式与:

相同
WHERE NOT (c1 = 'value' AND c2 = 'value')

我认为你应该检查布尔逻辑和真值表。

答案 1 :(得分:1)

第一个声明说C1C2,但都应该等于'value'。第二个说明C1C2中至少有一个必须等于'value'

因此,如果C1 != 'value'C2 != 'value',第一个表达式将为false,而第二个表达式将评估为true。这意味着一般来说,结果会有所不同。

由于XOR操作并不比OR操作更昂贵,因此我认为性能不会有任何显着差异。

答案 2 :(得分:0)

其他一些答案指出这两个表达式可以产生不同的结果。至于表现......

我很确定无论你有什么索引,这些都会进行全面扫描。您可以通过执行#import "RegisterUserViewController.h" @import FirebaseAuth; @import Firebase; @import FirebaseMessaging; @interface RegisterUserViewController () @end @implementation RegisterUserViewController - (void)viewDidLoad { [super viewDidLoad]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (IBAction)createUserButton:(id)sender { [[FIRAuth auth] createUserWithEmail:self.emailTextField.text password:self.passwordTextField.text completion:^(FIRUser * _Nullable user, NSError * _Nullable error) { if(error == nil) { NSLog(@"%@", user.email); NSLog(@"New user Created!"); [self performSegueWithIdentifier:@"BackToLogin" sender:nil]; } else { NSLog(@"%@",error); } }]; } @end 找到我希望输出的结果如下:

EXPLAIN SELECT ...;

答案 3 :(得分:0)

概念解剖:

了解或>>
$('#plus').click(function () { map.setZoom(map.getZoom()+1) }) $('#minus').click(function () { map.setZoom(map.getZoom()-1) }) :评估一个或两个条件以得出结果
Literal meaning:如果第一条件检查为假,则只有处理引擎将评估第二条件以得出结果。
注意:此处n = 2:
O(n)(上限)
Ω(1)(下界)

了解XOR
TimeComplexity (Performance):始终评估两个条件以得出结果。两者不能同时为真。 Literal meaning的意思是:(A XOR B)
(A AND !B) OR (!A AND B):检查两个条件并使用NOT&AND运算符比较结果。
注意:此处n = 2,+ 2适用于NOT,然后应用AND逻辑运算符:
O(2n + 2)(上限)
Ω(n + 2)(下界)

如您所见,处理引擎必须执行更多步骤才能得出XOR的结果。从概念上讲,XOR总是比OR慢。

PS 我确信所有处理引擎的内部都是经过高度优化的,可以很好地处理逻辑操作。因此,除非我们谈论数以百万计的交易,否则差异甚至不会明显。而且性能在这里甚至都不是问题,因为它不是苹果与苹果的比较。 OR和XOR逻辑运算符都有不同的用途。就像与其他运算符进行比较一样,让我们​​在OR&AND之间说是没有道理的。