-2

我知道在使用子查询时,IN将使用行数,并EXISTS在结果中找到匹配项后立即返回布尔值。

我也读过当子查询的结果数量很少时会节拍IN,当有很多结果时会节拍。EXISTSEXISTSIN

我想知道我是否在 SQL 查询中指定值如何IN执行 vsEXISTS例如:

SELECT col1, col2, col3
FROM table
WHERE col1 IN (1, 2, 3, 4, 5, 6, 7, 8, 9);

SELECT col1, col2, col3
FROM table
WHERE col1 EXISTS (1, 2, 3, 4, 5, 6, 7, 8, 9);

当值列表“大”如几百/千个值时会发生什么?

4

1 回答 1

0

您是否尝试过运行查询?这在语法上无效:

SELECT col1, col2, col3
FROM t
WHERE col1 EXISTS (1, 2, 3, 4, 5, 6, 7, 8, 9);

是一个 db<>fiddle。

如果您有一个固定的值列表,那么基本上您唯一的选择就是使用IN(或OR或子查询)。MySQLIN通过对常量值列表进行排序来进行优化。

于 2019-09-09T11:33:55.007 回答