假设我有两个查询:
select top 20 idField, field1, field2 from table1
where idField in
(
select idField from table1 where field3 like '...'
union
select idField from table2 where field4 like '...'
)
order by sortfield1
select top 20 idField, field1, field2 from table1
where field3 like '...'
or idfield in
(select idField from table2 where field4 like '...')
order by sortfield1假设两个表都相当大(table2比table1大),结果数的平均范围是0-400,但我总是希望最多20个结果。
有没有可能以很大的概率说出哪条语句的性能更好,和/或选择哪条语句取决于什么?谢谢
发布于 2010-06-24 03:21:57
在完美的世界里,这应该不会有什么不同,但我仍然会尝试这种方法。可能会更快:
select top 20 idField, field1, field2 from table1
where idField in
(
select top 20 idField from table1 where field3 like '...'
union
select top 20 idField from table2 where field4 like '...'
)发布于 2010-06-24 00:35:01
这很可能取决于您使用的dbms。我对联合使用Oracle (8)有过不好的体验,它非常慢,可能是因为它必须将两个查询的结果放入内存中的一个列表中。
我不确定这两个查询是否具有相同的结果。第二个查询只返回来自table1的值,而第一个查询也返回来自table2的值。
发布于 2010-06-24 00:36:04
检查explain计划,看看效率如何。如果索引当前不存在,它还可以让您深入了解索引。
https://stackoverflow.com/questions/3103581
复制相似问题