- 浏览: 256397 次
- 性别:
- 来自: 北京
-
文章分类
- 全部博客 (232)
- 瞎扯两句 (8)
- 操作系统 (5)
- 工作笔记 (33)
- 设计模式 (1)
- java (57)
- Java IDE (7)
- hibernate (17)
- oracle (46)
- ms sql (2)
- spring (9)
- struts2 (0)
- javascript (16)
- java_code (2)
- java之集合 (2)
- java之线程 (4)
- java之IO (4)
- java之虚拟机 (6)
- java之异常 (0)
- EJB (4)
- XML (4)
- 数据结构-算法 (2)
- 架构设计 (5)
- 配置信息 (2)
- 阅读笔记 (6)
- IT专业英语 (1)
- PI (0)
- 单元测试 (1)
最新评论
一:左右连接实例。
表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.
表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.
发表评论
-
oracle sql优化
2013-09-23 14:29 6661.绑定变量 不适用在OLAP系统中。 因为在OLAP中, ... -
阅读笔记 SQL
2013-08-14 18:24 836Start with...Connect By子句递归查询一般 ... -
oracle 锁 分析
2013-06-18 10:57 4861. 分为 tx 和 tm 。 即 行级 和 表级 其中 ... -
Oracle的TX锁(行级锁、事务锁)
2013-06-18 10:04 947问题:如何使用事务? ... -
mysql 时间戳自动更新
2013-04-09 10:24 991-- Table "pnodetail" ... -
阅读笔记
2013-02-07 17:24 431. 在OLTP系统装要注意sql的硬解析,但是在OLA ... -
synonym
2013-02-07 16:58 963建立一个同义词可以排除一个对象名字的限制. 如果你的数据库有多 ... -
oracle schema
2013-02-07 16:50 774A schema is a collection of dat ... -
物化视图的使用分析
2013-02-05 17:27 7991. 在 深入浅出 系列中,作者列举了一个例子来说明。 ... -
Oracle编程艺术阅读笔记-2
2013-01-29 10:40 7791. 位图索引。 不 ... -
Oracle:位图索引与死锁-2
2013-01-28 18:24 850位图索引被存储为压缩的索引值,其中包含了一个范围内的ROWID ... -
Oracle:位图索引与死锁-1
2013-01-28 18:04 879B 树索引更适合索引动态表的 OLTP 环境,而位图索引更适合 ... -
Oracle编程艺术阅读笔记-1
2013-01-24 18:48 8781. 绑定变量。 不使用会产生的影响: 每次运 ... -
JAVA完全控制Oracle中BLOB、CLOB说明
2012-12-28 17:07 858网络上很多关于JAVA对Oracle中BLOB、CLOB类型字 ... -
H2数据库的使用
2012-12-13 18:40 7801.下载h2的jar,例如h2-1.3.170.jar 2.c ... -
JTA
2012-12-05 17:35 983要理解 JTA 的实现原理 ... -
oracle 体系结构
2012-12-03 23:13 730[img][/img] oracle工作原理 ... -
oracle 存储过程实例-4
2012-12-03 23:04 547--错误处理部分。 --自 ... -
oracle 存储过程实例-4
2012-12-03 23:02 850--错误处理部分。 --自定义异常处理 CREATE OR ... -
oracle 存储过程实例-3
2012-12-03 21:42 820PROCEDURE autoissuereturns ( ...
相关推荐
3. 管理:连接池管理器负责维护池中连接的状态,包括检查空闲连接的有效性,回收过期或无用的连接,并根据需求动态调整池的大小。 在Java中,可以使用第三方库如Apache Commons Pool或者HikariCP来实现Socket连接池...
这种连接方式通常不是有意为之的,因为它会生成大量无用的数据。 #### 示例 如果在 SQL 查询中没有指定连接条件,则会发生笛卡尔连接: ```sql SELECT a.user_name, b.dev_no FROM user_info a, dev_info b; ``` #...
6. **关闭无用连接**:虽然`requests`会自动管理连接,但在某些情况下,如服务器主动关闭连接或长时间无活动,可能需要手动关闭`Session`以释放资源。 7. **注意HTTP/2**:`requests`库从版本2.13.0开始支持HTTP/2...
注销会话是释放服务器资源的有效方式,避免了无用的连接占用名额。 解决方法二是踢出已断开连接的用户。通过telnet等方式重新连接到服务器,然后使用`query user`命令查看当前在线用户,找出状态为“已断开”的用户...
然而,它也有缺点,比如可能会浪费资源,保持过多无用的连接。因此,良好的连接池管理策略包括: 1. 按需创建连接池,避免提前建立大量连接。 2. 使用完连接后立即关闭,不依赖垃圾收集器。 3. 确保关闭用户定义的...
因此,适时地清理无用或过期的SQL连接是保持系统稳定运行的关键。 “SQL连接清除工具”正是为了解决这个问题而设计的。这类工具能够检测并关闭那些不再活动或者超时的连接,以释放宝贵的数据库资源。它们通常具备...
系统服务是操作系统中的一个组件,它们在后台运行,为操作系统或应用程序提供各种功能,如网络连接、设备驱动、安全防护等。服务通常在启动时自动运行,并持续存在,直到系统关闭。 智能关闭无用服务的过程通常包括...
在Windows Server环境中,有时会遇到无用的网络接口卡(NIC)占用IP地址的问题,这可能会导致IP冲突或网络配置混乱。在这种情况下,正确地识别并删除这些无用的网卡是必要的。以下是一个详细的过程,指导你如何在...
在IT领域,优化系统性能是常见的任务之一,而关闭无用的服务是实现这一目标的有效手段。服务,或者说系统服务,是指在操作系统后台运行的、提供特定功能的应用程序,它们为其他程序或整个系统提供支持。当电脑上的...
4. **进程的行为**:观察进程是否有异常行为,如频繁读写硬盘、尝试连接网络等。 在Windows系统中,我们可以使用任务管理器来查看和结束进程。按下Ctrl+Shift+Esc键可以打开任务管理器,然后在"进程"或"详细信息...
6. **用户会话管理**: 管理员可以通过策略设置,如强制注销空闲会话,来优化现有连接的使用,避免因无用会话占用连接资源。 7. **远程桌面Web访问**: 将远程桌面服务与IIS结合,启用远程桌面Web访问,用户通过网页...
此外,有些程序或服务可能需要特定的本地连接,因此在删除前最好确认这些连接是否真的无用。 在执行上述操作时,如果有任何疑问或遇到问题,可以查阅微软官方的帮助文档或在线技术论坛获取帮助。删除多余的本地连接...
标题“svn本地文件夹断开服务器连接”...这通常包括删除.svn文件夹,以减少无用文件和防止未来可能出现的版本冲突。提供的批处理脚本和注册表脚本可能是实现这一目标的有效工具,但使用时需要注意数据安全和团队沟通。
6. 数据库维护:定期进行数据库维护,如清理无用数据、更新统计信息、重建索引等,有助于保持数据库的健康状态。 接下来,我们讨论如何连接数据库: 1. 连接工具:有许多工具可用于连接数据库,例如MySQL ...
1. **笛卡尔乘积**:在没有明确连接条件的情况下,两个表的简单连接会产生笛卡尔乘积,即每一张表的每一行与其他表的所有行组合,导致结果集庞大且通常无用。 2. **基本的表连接**:通过指定连接列,如id,可以避免...
服务可以提供网络连接、打印、设备驱动等关键功能,也可以是第三方软件安装的后台进程。 **知识点二:服务的分类** 1. **系统服务**:由Windows本身提供的核心服务,对操作系统正常运行至关重要。 2. **应用服务**...
Redis是一种高性能的键值对数据存储系统,常用于缓存、消息队列等场景。在Java环境下,我们通常使用...请确保在使用过程中遵循最佳实践,例如定期清理无用的数据,避免阻塞操作,以及合理设置连接池参数以优化性能。
系统服务是Windows XP后台运行的各种程序,它们负责执行特定的功能,如网络连接、设备管理等。然而,并非所有服务对于每个用户都是必需的,有些服务可能因为特定的应用场景或个人需求而显得冗余,甚至可能占用宝贵的...
10. **安全性最佳实践**:在实际应用中,应遵循一些安全规范,例如使用参数化查询防止SQL注入攻击,不泄露敏感信息,及时断开无用的数据库连接,以及考虑使用连接池优化性能。 通过学习以上知识点,并参考提供的C#...
- 定期维护:定期清理无用的连接,保持连接池的健康。 以上就是关于MySQL ProxyPool连接池的相关知识点,希望对你在MyEclipse中的实践有所帮助。在实际应用中,理解并熟练掌握这些内容,能够有效提高你的项目性能...