对WITH和from(select ...)的一点比较

本文通过一个小实验对比了在SQL查询中使用WITH子句与FROM(SELECT)两种方式的性能表现,发现对于大型数据表,二者在执行计划上并无明显差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

         在之前的工作中,我曾经遇到过表特别大的情况,这个时候我想到了使用with来降低查询的消耗,前文中已经有了描述:http://blog.youkuaiyun.com/uncle_six/article/details/7203078。今天我突然想到,其实用with和from (select)应该没有本质的差别。所以做了个小实验。

         我的表大概7W行,使用with的SQL语句如下:

         

WITH A AS (SELECT T.OWNER,
               T.OBJECT_NAME,
               T.OBJECT_ID,
               T.DATA_OBJECT_ID,
               T.OBJECT_TYPE,
               T.LAST_DDL_TIME,
               T.EDITION_NAME,
               T.NAMESPACE
          FROM TEST1 T
          WHERE T.OBJECT_NAME = 'I_USER1')
SELECT * FROM A;
        另外一个SQL如下:

        

SELECT *
  FROM (SELECT T.OWNER,
               T.OBJECT_NAME,
               T.OBJECT_ID,
               T.DATA_OBJECT_ID,
               T.OBJECT_TYPE,
               T.LAST_DDL_TIME,
               T.EDITION_NAME,
               T.NAMESPACE
          FROM TEST1 T
          WHERE T.OBJECT_NAME = 'I_USER1');
       这个表的索引在OBJECT_NAME上。

        这两个语句的执行计划: 



         可以看到两者的执行计划没有任何区别。也就是说,在表的数据量十分巨大的情况下,不管是使用with还是from (select ...)这种形式,可以通过选择需要的列来降低bytes,从而达到提高效率的目的,但是两者孰优孰劣,应该说是没有太大的区别的。

         

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值