首页
学习
活动
专区
圈层
工具
发布

union与or
EN

Stack Overflow用户
提问于 2010-06-24 00:32:01
回答 4查看 284关注 0票数 0

假设我有两个查询:

代码语言:javascript
复制
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个结果。

有没有可能以很大的概率说出哪条语句的性能更好,和/或选择哪条语句取决于什么?谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-06-24 03:21:57

在完美的世界里,这应该不会有什么不同,但我仍然会尝试这种方法。可能会更快:

代码语言:javascript
复制
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 '...'
    )
票数 1
EN

Stack Overflow用户

发布于 2010-06-24 00:35:01

这很可能取决于您使用的dbms。我对联合使用Oracle (8)有过不好的体验,它非常慢,可能是因为它必须将两个查询的结果放入内存中的一个列表中。

我不确定这两个查询是否具有相同的结果。第二个查询只返回来自table1的值,而第一个查询也返回来自table2的值。

票数 1
EN

Stack Overflow用户

发布于 2010-06-24 00:36:04

检查explain计划,看看效率如何。如果索引当前不存在,它还可以让您深入了解索引。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3103581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档