查询时使用等于还是不等于更好?

dav*_*vad 3 mysql sql database oracle

我正在使用 MySQL 数据库,但这个问题可能适用于 SQL、Oracle 等。

我有一张包含产品的表格,其中一列是品牌,我让用户可以选择他想要的品牌。我的问题是,是从该表中选择与所选品牌匹配的所有结果进行查询,还是从该表中选择与未选择的品牌不匹配的所有结果进行查询更好?

因此,

寻找等于或不等于的结果是否更有效/更快(或相同)?以及为什么...

Gor*_*off 7

性能是使用的原因之一=。这有两个组成部分。首先是索引,=比较提供更强大的索引功能。二是分区。虽然不太可能在只接受少量值的列上,=但更适合解决分区问题。

另一个原因是语义。s的存在NULL可能会令人困惑。考虑两个比较:

where col = 'x'
where col <> 'x'
Run Code Online (Sandbox Code Playgroud)

这两个子句都会过滤掉is 的where值。这对于. 然而,即使您了解了规则,它还是有点令人困惑。直觉上,我们认为“不等于”x”,所以它应该是真的”。事实上,表示未知值,并且未知值可能等于,因此该陈述可能为真;事实上,它返回的是被过滤掉的内容。colNULL=<>NULLNULL'x'NULL