MySQL:在vs中存在值(无子查询)

MySQL:在vs中存在值(无子查询),mysql,sql,Mysql,Sql,我知道在使用子查询时,中的将使用行数,EXISTS将在结果中找到匹配项后立即返回布尔值 我还读到,当子查询的结果数较低时,INbeatsEXISTS,当结果较多时,EXISTS将beatIN 我想知道我是否在SQL查询中指定了值,中的与存在相比如何执行,例如: 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

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

我还读到,当子查询的结果数较低时,
IN
beats
EXISTS
,当结果较多时,
EXISTS
将beat
IN

我想知道我是否在SQL查询中指定了值,
中的
存在相比如何执行,例如:

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);

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

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

SELECT col1, col2, col3
FROM t
WHERE col1 EXISTS (1, 2, 3, 4, 5, 6, 7, 8, 9);
他是一把小提琴


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

你听说过“微优化是万恶之源”这句话吗?我认为它适用于这里。如果有疑问,请自己运行查询并检查性能。谢谢,我会亲自尝试,但我想了解它首先要做什么。谁说这是一个“微观优化”呢?在发布问题之前,您是否尝试过这些查询中的任何一个,即使它们是有效的?
中的
加载所有可用值并尝试匹配它们,而
EXISTS
是一个布尔运算符。因此,根据您的结果集,
中的
对于较小的结果集可能更快,而
存在
对于较大的结果集可能是一个优势。您比较过他们的解释计划吗?