SQL优化--使用关联查询代替子查询
测试例子:
子查询:
select a.*,
(select workflowname from workflowbase where id=workflowid) workflowname
from [[zping.com]]] a
where a.operator='402882ed1112669201112a8385892f33'
执行结果:
(360 行受影响)
表 'Worktable'。扫描计数 360,逻辑读取 142334 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'workflowbase'。扫描计数 1,逻辑读取 1589 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 '[zping.com]'。扫描计数 1,逻辑读取 366 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
关联查询:
select a.*,b.workflowname
from [[zping.com]]] a inner join workflowbase b on a.workflowid=b.id
where operator='402882ed1112669201112a8385892f33'
执行结果:
(360 行受影响)
表 'Worktable'。扫描计数 0,逻辑读取 0 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'workflowbase'。扫描计数 1,逻辑读取 1589 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 '[zping.com]'。扫描计数 1,逻辑读取 366 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
这里:子查询IO次数:142334 +1589+366=144289
关联查询IO次数:1589 +366 =1922
关联查询是子查询的75倍
总结:
使用子查询和关联查询,一般情况下如果能用关联查询就不用子查询,
分享到:
相关推荐
- **使用JOIN代替子查询**:如果两个表中的数据量都不大,可以尝试使用INNER JOIN等连接方式来代替子查询,这样可以显著提升查询效率。 - **索引优化**:对于涉及的表和字段,合理建立索引可以极大提高查询速度。 - ...
要删除表中的重复记录,可以使用ROWID结合子查询的方式。这种方式利用ROWID快速定位每条记录的位置,从而高效地删除重复项。 #### 九、使用TRUNCATE替代DELETE 当需要删除整个表中的所有记录时,使用TRUNCATE命令而...
- 使用查询优化器提示来指导查询计划,如`WITH (INDEX())`,但需谨慎使用,确保不会影响整体性能。 以上技术细节展示了在面对大规模数据集时如何优化数据库查询,通过合理设计查询语句、利用索引、优化数据类型、...
- 在包含子查询的SQL语句中,应当尽量减少对表的查询次数。例如,可以通过预先创建视图或将查询结果存储在临时表中来实现这一点。 13. **利用Oracle内部函数提高SQL效率** - Oracle提供了许多内置函数,如NVL、...
在含有子查询的SQL语句中,应当特别注意减少对表的查询次数。 - **实践建议:** - 避免不必要的子查询。 - 优化子查询的结构,减少对主表的多次访问。 - 考虑使用临时表或物化视图来存储子查询结果。 以上知识...
- 使用内连接(INNER JOIN)代替子查询,以提高性能。 4. **使用分区:** - 对于大型表,可以通过分区来提高查询性能。 - 分区可以基于日期、范围等进行划分。 5. **避免使用SELECT *:** - 明确指定所需的列,...
- **问题描述**:在含有子查询的SQL语句中,多次查询同一张表会增加查询时间。 - **解决方案**:优化查询逻辑,减少不必要的表查询。 ##### 9. SQL语句用大写 - **问题描述**:Oracle默认将SQL语句转换为大写执行...
- **使用EXISTS代替IN**:在某些情况下,`EXISTS`子查询比`IN`更高效。 通过上述方法和技术,我们可以显著提高基于MySQL数据库的SQL查询性能。需要注意的是,在实际应用中,还需要根据具体的应用场景和需求进行调整...
使用JOIN代替子查询有时能提高效率,尤其是当JOIN的关联条件可以利用索引时。另外,适当使用临时表或存储过程也可以帮助优化复杂查询。 总的来说,SQL查询优化不仅依赖于数据库管理系统自身的优化器,更需要程序员...
- **要点**: 在包含子查询的SQL语句中,特别注意减少对表的查询。 - **实践**: 例如,避免不必要的子查询嵌套。 #### 十三、通过内部函数优化查询 - **要点**: 使用Oracle提供的内部函数,如NVL、NULLIF等,可以...
8. **高效删除重复记录**:使用ROWID进行删除,例如通过子查询找到最小ROWID保留一条记录,其他重复记录则删除。 9. **使用TRUNCATE替代DELETE**:当需要删除整个表时,使用TRUNCATE而非DELETE,前者不涉及回滚段,...
使用连接(JOIN)来代替子查询(Sub-Queries) 虽然MySQL从4.1版本开始支持子查询,但相比于子查询,使用连接查询通常能提供更好的性能。这是因为连接查询可以避免创建临时表,从而减少资源消耗并加快查询速度。例如,...
- **关注子查询的性能**:在复杂的SQL查询中,特别需要注意子查询的性能优化。例如,通过减少嵌套查询层数、优化索引使用等方式来提升查询速度。 - **使用EXISTS而非IN**:在某些场景下,使用EXISTS替代IN可以减少...
虽然`EXISTS`子查询通常比表连接更高效,但在某些场景下,直接使用表连接可以避免额外的子查询,从而提高性能。 ##### 3.18 用EXISTS替换DISTINCT 在某些情况下,使用`EXISTS`代替`DISTINCT`可以简化查询,提高...
在本课程中,我们将深入探讨 SQL 语句执行的过程、ORACLE 优化器、表之间的关联、如何得到 SQL 执行计划、如何分析执行计划等内容,帮助大家逐步掌握 SQL 优化的过程。 首先,让我们了解 SQL 语句的执行过程。SQL ...
- **优化建议**:使用临时表或子查询结果集。 ##### 3.16 通过内部函数提高SQL效率 - **问题描述**:某些函数可能导致性能下降。 - **优化建议**:了解并使用Oracle提供的内部函数来提高性能。 ##### 3.17 使用表...
11. **减少对表的查询**:避免不必要的子查询,尤其是对同一表的重复查询,可以考虑使用JOIN或临时表。 12. **利用内部函数提高效率**:熟练运用Oracle的内置函数,可以简化复杂查询,提高执行速度。 13. **使用表...
但请注意的是:优化只针对 SELECT 有效,对 UPDATE/DELETE 子查询无效,固生产环境应避免使用子查询。 2. 用 IN 来替换 OR 低效查询:`SELECT * FROM t WHERE id = 10 OR id = 20 OR id = 30;` 高效查询:`SELECT ...
为了提高查询性能,应考虑子查询的优化策略,如使用EXISTS代替IN,或者将大子查询转换为临时表。例如,使用EXISTS找到销售过至少一件商品的客户: ```sql SELECT customer_name FROM customers WHERE EXISTS ...
- 使用JOIN代替子查询,尤其是在处理大量数据时,JOIN往往能提供更好的性能。 6. **案例分析**: 提供的`高级查询数据库子查询.sql`文件很可能包含了各种子查询的实际例子,包括但不限于:找出销售额超过平均销售...