MySQL 的 WHERE 子句哪个版本最好?

Which version of WHERE clause of MySQL is the best?

哪个版本的 WHERE 最适合在 MySQL 中使用?结果是一样的。在速度或效率或其他方面有什么不同吗?

哪里不或:

SELECT Country
FROM Customers
WHERE NOT (Country = 'Argentina' OR Country = 'Brazil')
GROUP BY Country

哪里 <> 和:

SELECT Country
FROM Customers
WHERE (Country <> 'Argentina' AND Country <> 'Brazil')
GROUP BY Country

哪里!= 和:

SELECT Country
FROM Customers
WHERE (Country != 'Argentina' AND Country != 'Brazil')
GROUP BY Country

不喜欢和:

SELECT Country
FROM Customers
WHERE (Country NOT LIKE 'Argentina' AND Country NOT LIKE 'Brazil')
GROUP BY Country

Here可以试试

使用您觉得最舒服的那个。它们都是等价的——或者至少在最合理的情况下是等价的。但是,like 不一样,例如,如果字符串有任何通配符。注意:like 没有通配符应该仍然使用索引,所以即使性能应该是相似的。

不过,我会推荐:

where country not in ('Argentina', 'Brazil')

我认为它最简洁地捕捉到了您想要的逻辑。

您的所有 4 个查询在逻辑上都是相同的,事实上所有 4 个查询可能具有相同的执行计划。尝试 运行 EXPLAIN 亲自看看。这里更大的问题是代码技巧,在这一点上,我更喜欢上面的 none,而不是这个 WHERE IN 版本:

SELECT Country
FROM Customers
WHERE Country NOT IN ('Argentina', 'Brazil')
GROUP BY Country