3

例如在以下查询中

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

假设 LastName 被索引,单个查询是否比对 LastName 执行三个单独的查询更有效?

4

3 回答 3

2

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

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

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

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

于 2012-06-01T10:37:05.917 回答
0

在这种特定情况下,答案可能是肯定的:正如 Dems 所说:

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

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

  • 一些数据库不允许IN子句中有任意数量的元素。Oracle 将您限制为 1000。因此,即使一次查询会更快,您也不能总是如此。
  • 如果 之后的表达式IN是子查询,则运行该子查询会更快,在您的应用程序中处理结果并使用值列表构建第二个查询(通常是因为索引和/或类型转换问题)。
于 2012-06-01T11:39:41.243 回答
0

If you will create index in column it will affect your performance.. You can use non-clustered indices on any foreign key columns.

This will help you..

try to implement several queries like this some of with index and some of without index.. You will know difference..

于 2012-06-01T10:38:29.010 回答