例如,在以下查询中
SELECT * FROM Persons
WHERE LastName IN ('Hansen','Pettersen', 'Smith')
假设LastName已编入索引,单个查询比在LastName上执行三个单独查询更有效吗?
答案 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
之后的表达式是子查询,则运行该子查询会更快,在您的应用中处理结果并使用值列表构建第二个查询(通常是因为索引和/或输入铸造问题)。