SQL IN比单独查找更有效吗?

时间:2012-06-01 10:30:51

标签: sql

例如,在以下查询中

SELECT * FROM Persons
WHERE LastName IN ('Hansen','Pettersen', 'Smith')

假设LastName已编入索引,单个查询比在LastName上执行三个单独查询更有效吗?

3 个答案:

答案 0 :(得分:2)

执行单个查询比运行多个查询以检索相同数量的数据更快,因为您节省了网络往返次数。根据我的经验,往返次数通常是多查询场景中性能的最大杀手。

与具有三个条件的单个查询相比,

SELECT * FROM Persons
WHERE LastName='Hansen' OR LastName='Pettersen' OR LastName='Smith'

是不同的:大多数优化器都会发现它与IN查询相同,因此您的性能保持不变。

答案 1 :(得分:0)

如果您要在列中创建索引,则会影响您的效果。 您可以在任何外键列上使用非聚集索引。

这会对你有帮助..

尝试实现这样的几个查询,一些带索引,一些没有索引。 你会知道差异..

答案 2 :(得分:0)

在这个具体案例中,答案是可能是:正如Dems所说:

  

1次网络往返而不是3次,1次解析开销而不是3次,1次旅行的索引而不是3次

但对于一般情况并非如此。例子:

  • 某些数据库不允许IN子句中的任意数量的元素。 Oracle将您限制为1000.因此,即使在一个查询中执行速度更快,也不能总是如此。
  • 如果IN之后的表达式是子查询,则运行该子查询会更快,在您的应用中处理结果并使用值列表构建第二个查询(通常是因为索引和/或输入铸造问题)。