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
哪个版本的 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