mysql用什么代替in

EXISTS 的性能优于 IN,NOTEXISTS 的性能优于 NOTIN。

EXISTS 检查子查询是否有结果,并且 IN 必须匹配所有值。
对于大表使用 EXISTS,对于小表使用 IN。

NOTEXISTS 使用索引,而 NOTIN 则不使用。
桌子的大小并不重要。
NOTEXISTS 总是很快。

IN 只能包含一个字段,而 EXISTS 则没有限制。
当 OR 较多时,IN 更好。

我该如何选择?您可以自行检查表大小和索引状态。

mysql中in会用索引吗

IN取决于是否使用索引:
如果值较小,则使用索引。
例如IN(1 ,2 ,3 )应该使用B+树进行扫描,类型字段为Range。
如果它的价格很高,就不要使用它。
IN(1 ...1 0000)可以直接扫描全表,类型变为ALL。

应考虑特殊情况: NOTIN 本身不使用索引。
如果条件太多的话肯定会失败。
复合索引不能用于非第一列。
例如,索引 (A, B)、B IN (...) 无效。
数据类型必须正确。
如果类型不匹配,则切换到全表扫描。

如何更改: 对大型 IN 列表使用临时表 JOIN,或批量签入。

首先看一下EXPLAIN。
只需输入范围。
Key Display Index 这个名字并没有什么问题。
行数较少是正常的。

线条使问题更加清晰。
使用额外的时候要小心。

你自己看看。

如何在mysql中使用IN和NOT IN条件

上周我学习了如何在 MySQL 中使用 IN 和 NOTIN。
很有趣。

在列表中选择了 IN。
例如北京、上海、广州的测试用户。
SELECT FROM user WHERE city IN ('北京', '上海', '广州') 这就像编写多个 OR。
city='北京' OR city='上海' OR city='广州'
NOTIN 表示选择列表中没有的内容。
例如,检查非北京、上海或广州的用户。
SELECT FROM users WHERE city is NOT ('北京', '上海', '广州') 这就像编写多个 AND。
city!='北京' AND city!='上海' AND city!='广州'
子查询也有效。
例如查看3 0岁以上用户的订单。
SELECT FROM Orders WHERE user_id IN (SELECT id FROM users WHEREage > 3 0)
但 NOTIN 有缺陷。
如果列表中存在 NULL,则不会起作用。
例如 SELECT FROM users WHERE city NOT IN ('北京', NULL) 这将导致检测不到。
因为 NULL 意味着未知,所以无法评估。

所以最好使用 NOT EXISTS 代替。
SELECT FROM user u WHERE NOT EXISTS (SELECT 1 WORD (SELECT 'Beijing' AS city UNION SELECT NULL) t WHERE u.city = t.city)
长列表会很慢。
就像数千个值一样。
此时最好使用临时表。
先创建一个临时表 创建临时表 temp_cities(city VARCHAR(5 0)) 重新插入数据 INSERT INTO temp_cities VALUES ('北京'), ('上海'), ('广州') 然后检查 选择你。
FROM user u JOIN temp_cities t ON u.city = t.city
如果是子查询,请确保子查询字段有索引。
例如user_id字段需要建立索引。

总结。
IN 很容易使用,但要小心 NOTIN 中的 NULL。
使用 NOT EXISTS 更稳定。
对于长列表,请使用 JOIN 或临时表。