首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >哪种SQL的性能更好?

哪种SQL的性能更好?
EN

Stack Overflow用户
提问于 2014-07-02 14:22:04
回答 2查看 129关注 0票数 3

我有两条sql语句如下。它们可以检索相同的数据集。根据我的测试,SQL2似乎总是有更好的性能。我解释了这两种说法。他们有相同的执行计划。

有人能解释一下在这里使用子查询是否会影响性能吗?我们如何使用子查询来进行sql调优?

非常感谢!

代码语言:javascript
复制
--SQL 1
SELECT ADDRRF.ENTITYKEYID,
    ADDRESS1,
    ADDRESS2
FROM WODS_STG.BLIS_ADDRESSREFERENCE ADDRRF
LEFT JOIN WODS_STG.BLIS_ADDRESS ADDR
    ON ADDRRF.ADDRESSID = ADDR.ADDRESSID
WHERE ADDRRF.ADDRESSTYPEID = 10
    AND ADDRRF.ENTITYID = 3;

--SQL 2
SELECT ADDRRF.ENTITYKEYID,
    ADDRESS1,
    ADDRESS2
FROM (
    SELECT *
    FROM WODS_STG.BLIS_ADDRESSREFERENCE
    WHERE ADDRESSTYPEID = 10
        AND ENTITYID = 3
    ) ADDRRF
LEFT JOIN WODS_STG.BLIS_ADDRESS ADDR
    ON ADDRRF.ADDRESSID = ADDR.ADDRESSID;
EN

回答 2

Stack Overflow用户

发布于 2014-07-02 14:50:16

第二个查询可以更快,因为它从第一个查询缓存的SGA区域读取数据。换句话说,第一个查询使用硬解析,第二个查询使用软解析,因为它们具有相同的执行计划。尝试多次运行这两个查询,以确定第二个查询是否仍然更快。

票数 2
EN

Stack Overflow用户

发布于 2014-07-03 06:13:28

SQL 1:

在这里,sql engine首先联接表BLIS_ADDRESSREFERENCE和BLIS_ADDRESS,然后应用WHERE谓词来筛选记录。

SQL 2:

在这里,sql引擎首先从表BLIS_ADDRESSREFERENCE中筛选记录,然后与BLIS_ADDRESS表联接。我猜SQL2会更快,因为来自BLIS_ADDRESSREFERENCE的过滤记录比BLIS_ADDRESS要小。

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

https://stackoverflow.com/questions/24524194

复制
相关文章

相似问题

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