我正在使用一个MySQL数据库,但这个问题可能适用于SQL、Oracle等。
我有一个有产品的表格,其中一个列是品牌,我给用户选择他想要的品牌的可能性。我的问题来了,是应该进行一个查询,从该表中选择与所选品牌匹配的所有结果,还是进行一个查询,从该表中选择与未选定的品牌不匹配的所有结果?
因此,
寻找等于或不相等的结果是更有效/更快(或同样)吗?还有为什么..。
发布于 2016-06-10 00:23:15
性能是使用=的原因之一。这有两个组成部分。首先是索引,其中=比较提供了更强大的索引功能。第二种是分区。虽然在只需要几个值的列上不太可能,但=更适合解析分区。
另一个原因是语义。NULL的存在可能会让人感到困惑。考虑这两种比较:
where col = 'x'
where col <> 'x'这两个where子句都筛选出col为NULL的值。对于=来说,这是完全合理的。然而,即使在您了解了规则之后,它还是有点与<>混淆。直觉上,我们认为"NULL不等于x“,所以应该是真的。实际上,NULL意味着一个未知的值,一个未知的值可能等于'x',所以语句可能是真的;实际上,它返回被过滤掉的NULL。
发布于 2016-06-09 23:33:48
从性能角度来看,您可能希望使用等于来使用索引。
从逻辑的角度来看,使用“不等于”是危险的。在此场景中,您可以删除意外数据。1.检索品牌列表。2.将列表呈现给用户3。另一个操作插入一个新品牌X4。用户选择保留哪些品牌并按删除。5.品牌x被无意删除。
https://stackoverflow.com/questions/37737550
复制相似问题