这些查询之间的结果和性能是否存在差异?
SELECT a.id FROM table a WHERE (C1 = 'value' XOR C2 = 'value');
SELECT a.id FROM table a WHERE (C1 != 'value' OR C2 !='value');
答案 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)
第一个声明说C1
或C2
,但不都应该等于'value'
。第二个说明C1
,C2
中至少有一个必须不等于'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之间说是没有道理的。