`

外连接 及 无用的外连接

 
阅读更多
一:左右连接实例。

表TEST1:  id
         20
         30
         200
表TEST2:  id
         20
         30
         100
表TEST3:  id
         20
         100
         200

以下语句的查询结果
select t1.id as t1Id, t2.id as t2ID, t3.id as t3ID  from test1 t1 left join test2 t2 on t1.id = t2.id right join test3 t3 on t1.id = t3.id


结果: t1ID  t2ID  t3ID
      20    20     20
      200   null   200
      null  null   100

对于A left join B,则是A必有,B不必有。
对于A right join B,则是A不必有,B必有。

连续的连接时,A left join B right join C
则按照先后,先是A B的左连接,连接完之后再和C右连接。
A B的左连接,以A的记录为基准,
结果: t1ID  t2ID 
      20    20   
      30    30  
      200   null 

此结果再和C右连接,以C中全部记录为基准,
结果: t1ID  t2ID  t3ID
      20    20     20
      null  null   100
      200   null   200


二:无用的,多余的连接会影响效率
详见下例。
因为要确定的只是一个tin,那么就没必要用包含tin的主表再去 左外连接其余的表。
无论左外连接的表是否有符合条件的记录,主表的记录都是要包含进去的。


According to report, the following SQL is the slowest one.
     
SELECT DISTINCT cr01_trade_name, cg03_dereg_reason ......
from TR01_TAXPAYER_TIN t
where t.CR01_TIN_ID in
(SELECT a.CR01_TIN_ID
FROM TR12_ACCOUNTS_TIN a
left join TR02_OUTLET_TIN d on a.cr01_tin_id = d.cr01_tin_id and a.cr02_outlet_code = d.cr02_outlet_code
left join TR04_OUTLET_ADDRESS_TINS tr04 on a.cr01_tin_id = tr04.cr01_tin_id
left join TR37_ECONOMIC_CATEGORY_TIN tr37 on tr37.cr01_tin_id = a.cr01_tin_id
right join
(select e.CR01_TIN_ID, ......
from TR01_TAXPAYER_TIN e, TG09_TAXPAYER_TYPES c
where e.cg09_taxpayer_type=c.cg09_taxpayer_type) b on a.cr01_tin_id = b.cr01_tin_id
where 1=1 AND b.CS05_OFFICE_ID=111)
ORDER BY t.CR01_TIN_ID;

可以用下边的替换。即将在这里无用的左外连接去掉

SELECT DISTINCT t.cr01_trade_name,t.cg03_dereg_reason,....
from TR01_TAXPAYER_TIN t,TG09_TAXPAYER_TYPES c
where t.cg09_taxpayer_type=c.cg09_taxpayer_type and
t.CS05_OFFICE_ID=111 and
exists(select 1 from TR12_ACCOUNTS_TIN a where t.CR01_TIN_ID=a.CR01_TIN_ID)
order by t.CR01_TIN_ID;

The SQL Elapsed time can reduce from 00:00:01.53 to 00:00:00.30.
分享到:
评论

相关推荐

    java socket连接池

    3. 管理:连接池管理器负责维护池中连接的状态,包括检查空闲连接的有效性,回收过期或无用的连接,并根据需求动态调整池的大小。 在Java中,可以使用第三方库如Apache Commons Pool或者HikariCP来实现Socket连接池...

    ORACLE表连接方式

    这种连接方式通常不是有意为之的,因为它会生成大量无用的数据。 #### 示例 如果在 SQL 查询中没有指定连接条件,则会发生笛卡尔连接: ```sql SELECT a.user_name, b.dev_no FROM user_info a, dev_info b; ``` #...

    构建高效的python requests长连接池详解

    6. **关闭无用连接**:虽然`requests`会自动管理连接,但在某些情况下,如服务器主动关闭连接或长时间无活动,可能需要手动关闭`Session`以释放资源。 7. **注意HTTP/2**:`requests`库从版本2.13.0开始支持HTTP/2...

    解决服务器连接数量的限制.docx

    注销会话是释放服务器资源的有效方式,避免了无用的连接占用名额。 解决方法二是踢出已断开连接的用户。通过telnet等方式重新连接到服务器,然后使用`query user`命令查看当前在线用户,找出状态为“已断开”的用户...

    数据库连接池管理策略

    然而,它也有缺点,比如可能会浪费资源,保持过多无用的连接。因此,良好的连接池管理策略包括: 1. 按需创建连接池,避免提前建立大量连接。 2. 使用完连接后立即关闭,不依赖垃圾收集器。 3. 确保关闭用户定义的...

    SQL连接清除工具

    因此,适时地清理无用或过期的SQL连接是保持系统稳定运行的关键。 “SQL连接清除工具”正是为了解决这个问题而设计的。这类工具能够检测并关闭那些不再活动或者超时的连接,以释放宝贵的数据库资源。它们通常具备...

    智能关闭无用服务

    系统服务是操作系统中的一个组件,它们在后台运行,为操作系统或应用程序提供各种功能,如网络连接、设备驱动、安全防护等。服务通常在启动时自动运行,并持续存在,直到系统关闭。 智能关闭无用服务的过程通常包括...

    删除占用IP的无用网卡

    在Windows Server环境中,有时会遇到无用的网络接口卡(NIC)占用IP地址的问题,这可能会导致IP冲突或网络配置混乱。在这种情况下,正确地识别并删除这些无用的网卡是必要的。以下是一个详细的过程,指导你如何在...

    关闭无用的服务的程序

    在IT领域,优化系统性能是常见的任务之一,而关闭无用的服务是实现这一目标的有效手段。服务,或者说系统服务,是指在操作系统后台运行的、提供特定功能的应用程序,它们为其他程序或整个系统提供支持。当电脑上的...

    清理系统内无用的进程

    4. **进程的行为**:观察进程是否有异常行为,如频繁读写硬盘、尝试连接网络等。 在Windows系统中,我们可以使用任务管理器来查看和结束进程。按下Ctrl+Shift+Esc键可以打开任务管理器,然后在"进程"或"详细信息...

    图解windows2003远程桌面最大连接数

    6. **用户会话管理**: 管理员可以通过策略设置,如强制注销空闲会话,来优化现有连接的使用,避免因无用会话占用连接资源。 7. **远程桌面Web访问**: 将远程桌面服务与IIS结合,启用远程桌面Web访问,用户通过网页...

    删除win7中多余的本地连接

    此外,有些程序或服务可能需要特定的本地连接,因此在删除前最好确认这些连接是否真的无用。 在执行上述操作时,如果有任何疑问或遇到问题,可以查阅微软官方的帮助文档或在线技术论坛获取帮助。删除多余的本地连接...

    svn本地文件夹断开服务器连接

    标题“svn本地文件夹断开服务器连接”...这通常包括删除.svn文件夹,以减少无用文件和防止未来可能出现的版本冲突。提供的批处理脚本和注册表脚本可能是实现这一目标的有效工具,但使用时需要注意数据安全和团队沟通。

    数据库方面注意事项及连接数据库

    6. 数据库维护:定期进行数据库维护,如清理无用数据、更新统计信息、重建索引等,有助于保持数据库的健康状态。 接下来,我们讨论如何连接数据库: 1. 连接工具:有许多工具可用于连接数据库,例如MySQL ...

    sql 不同类型表连接讲解

    1. **笛卡尔乘积**:在没有明确连接条件的情况下,两个表的简单连接会产生笛卡尔乘积,即每一张表的每一行与其他表的所有行组合,导致结果集庞大且通常无用。 2. **基本的表连接**:通过指定连接列,如id,可以避免...

    智能关闭无用服务.rar

    服务可以提供网络连接、打印、设备驱动等关键功能,也可以是第三方软件安装的后台进程。 **知识点二:服务的分类** 1. **系统服务**:由Windows本身提供的核心服务,对操作系统正常运行至关重要。 2. **应用服务**...

    连接redis所需jar包.zip

    Redis是一种高性能的键值对数据存储系统,常用于缓存、消息队列等场景。在Java环境下,我们通常使用...请确保在使用过程中遵循最佳实践,例如定期清理无用的数据,避免阻塞操作,以及合理设置连接池参数以优化性能。

    WINDOS XP智能关闭无用服务

    系统服务是Windows XP后台运行的各种程序,它们负责执行特定的功能,如网络连接、设备管理等。然而,并非所有服务对于每个用户都是必需的,有些服务可能因为特定的应用场景或个人需求而显得冗余,甚至可能占用宝贵的...

    C# 连接MSSQL数据库源码实例

    10. **安全性最佳实践**:在实际应用中,应遵循一些安全规范,例如使用参数化查询防止SQL注入攻击,不泄露敏感信息,及时断开无用的数据库连接,以及考虑使用连接池优化性能。 通过学习以上知识点,并参考提供的C#...

    mysqlproxool连接池

    - 定期维护:定期清理无用的连接,保持连接池的健康。 以上就是关于MySQL ProxyPool连接池的相关知识点,希望对你在MyEclipse中的实践有所帮助。在实际应用中,理解并熟练掌握这些内容,能够有效提高你的项目性能...

Global site tag (gtag.js) - Google Analytics