使用 IN 子句的性能

Man*_*kal -5 mysql performance sql-server mysql-5.5 query-performance

索引数据会影响查询性能吗?意味着如果我在任何子IN句中以有序形式将值传递为 1,2,3,4... ,它可以提高查询性能吗?如果我随机传递值 2,5,7,9,1 等会发生什么......

例子 :

Select Name from Emp 
where id IN (1,2,3,4)  -- Ordered values
Run Code Online (Sandbox Code Playgroud)

或者:

Select Name from Emp 
where id IN (4,2,7,98,34) -- Randomly ordered values
Run Code Online (Sandbox Code Playgroud)

其它的办法 :

Select Name from Emp 
where id IN (Select empid from trans order by empty) -- Ordered values
Run Code Online (Sandbox Code Playgroud)

我要求 MySql 以及 SQL-Server 数据库。

谁能告诉我数据库引擎如何在上述情况下获得结果(执行计划)?

gbn*_*gbn 5

它们是2个不同的概念

  • where id IN ( 1,2,3,4) 只是简写 id = 1 OR id = 2 OR id = 3 OR ...
  • where id IN (Select empid from trans order by empty)半连接

因此,简单数字列表的值排序没有任何区别

对于半连接,无论如何都应该有一个索引,因为它是一种 JOIN。请注意,子查询中的 ORDER BY 会在 SQL Server 上给出错误,因为它没有意义(除非您使用 TOP)。不确定 MySQL,但我怀疑它会简单地忽略它。