低效:
SELECT a.*,
b.object_name
FROM TEST_OBJECT a,
TEST_OBJ1 b
WHERE SUBSTR(a.object_name, 1, LENGTH(b.object_name)) = b.object_name;
実行計画
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=ALL_ROWS (Cost=26 Card=67 Bytes=2077)
1 0 NESTED LOOPS (Cost=26 Card=67 Bytes=2077)
2 1 TABLE ACCESS (FULL) OF 'TEST_OBJECT' (TABLE) (Cost=2 Card=82 Bytes=1558)
3 1 TABLE ACCESS (FULL) OF 'TEST_OBJ1' (TABLE) (Cost=0 Card=1 Bytes=12)
高效:
SELECT a.*,
b.object_name
FROM TEST_OBJECT a,
TEST_OBJ1 b
WHERE
SUBSTR(a.object_name, 1, LENGTH(b.object_name)) = b.object_name
SUBSTR(a.object_name, 1, 4) = SUBSTR(b.object_name, 1, 4)--hash join
AND LENGTH(b.object_name) > 3
UNION ALL
SELECT a.*,
b.object_name
FROM TEST_OBJECT a,
TEST_OBJ1 b
WHERE SUBSTR(a.object_name, 1, LENGTH(b.object_name)) = b.object_name
AND LENGTH(b.object_name) < 4;
実行計画
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=ALL_ROWS (Cost=10 Card=4 Bytes=124)
1 0 UNION-ALL
2 1 HASH JOIN (Cost=5 Card=1 Bytes=31)
3 2 TABLE ACCESS (FULL) OF 'TEST_OBJ1' (TABLE) (Cost=2 Card=4 Bytes=48)
4 2 TABLE ACCESS (FULL) OF 'TEST_OBJECT' (TABLE) (Cost=2 Card=82 Bytes=1558)
5 1 NESTED LOOPS (Cost=5 Card=3 Bytes=93)
6 5 TABLE ACCESS (FULL) OF 'TEST_OBJ1' (TABLE) (Cost=2 Card=4 Bytes=48)
7 5 TABLE ACCESS (FULL) OF 'TEST_OBJECT' (TABLE) (Cost=1 Card=1 Bytes=19)
分享到:
相关推荐
1. **查询优化**:检查SQL语句,尝试使用其他类型的JOIN,如Nested Loop JOIN或Merge JOIN,它们可能对内存需求较小。同时,考虑是否可以通过添加索引、减少JOIN条件或使用子查询来降低数据量。 2. **内存调整**:...
总的来说,Hash Join 算法是 Oracle SQL 优化和调优的关键工具之一,尤其在处理大型数据集时。理解其工作原理和优化策略,可以帮助数据库管理员和开发人员编写更高效、更优化的 SQL 查询,从而提升系统性能。在实际...
通过实现SortMergeJoin和HashJoin,你可以在Java环境中模拟SQL的INNER JOIN操作,这对于理解和优化数据库查询性能具有重要意义。在实际应用中,可以根据数据规模、内存资源和特定场景来选择适合的JOIN算法。
第2章 风驰电掣——有效缩短SQL优化过程 24 2.1 SQL调优时间都去哪儿了 25 2.1.1 不善于批处理频频忙交互 25 2.1.2 无法抓住主要矛盾瞎折腾 25 2.1.3 未能明确需求目标白费劲 26 2.1.4 没有分析操作难度乱调优...
2. **连接操作**:如果使用了嵌套循环连接(Nested Loop Join)且数据量大,可考虑改为更高效的连接方法,如哈希连接(Hash Join)或合并连接(Merge Join)。 3. **排序与分组**:对大量数据进行排序或分组可能会...
- 当使用选择性优化器时,数据库会根据表是否已经被`ANALYZE`过,来决定是使用基于规则还是基于成本的优化策略。如果表已经被`ANALYZE`过,则自动采用基于成本的优化器;反之,则采用基于规则的优化器。 - 为了...
SQL优化涉及到查询语句的编写、索引的使用、数据访问路径的选择等多个方面,旨在减少查询时间、降低资源消耗,从而提升系统整体的响应速度和用户体验。下面我们将深入探讨SQL优化的多个重要知识点。 1. **优化查询...
在SQL查询优化中,理解如何有效地处理JOIN操作至关重要,因为JOIN是将多个数据源整合在一起的关键操作。在本文中,我们将深入探讨通过分析SQL语句的执行计划来优化JOIN的方法,特别是关注JOIN过程中的顺序和连接类型...
本文将详细介绍Oracle SQL中的“提示”(HINT)技术,这是Oracle SQL优化中使用的一项辅助手段,通过为查询提供额外的优化指导,帮助优化器生成更好的执行计划。 在开始讨论具体的SQL提示之前,我们先来理解什么是...
SQL优化主要涉及查询效率、索引使用、查询语句结构优化等多个方面。 首先,理解SQL执行原理是优化的基础。MySQL采用解析、优化、执行三个步骤来处理SQL语句。解析阶段会检查语法和权限;优化阶段会选择最佳的执行...
通过可靠的统计和精确的估算,我们能够在这些领域做出好的决定:选择散列连接(hash join)操作的正确构建端(build side),选择正确的连接算法(如broadcast hash join与 shuffled hash join), 调整连接的顺序...
在MySQL 8.0.18中,增加了Hash Join新功能,它适用于未创建索引的字段,...我们用explain format=tree命令可以查看到已经使用到hash join算法。 但目前8.0.18版本,仅支持join。left join和right join失效,这里请注意
SQL Server 2000作为一款广泛使用的数据库管理系统,其优化不仅能够提升查询速度,减少资源消耗,还能增强系统的稳定性和安全性。特别是对于高负载环境,有效的优化策略能够显著改善用户体验,提高企业业务的运行...
同时,理解何时Hash Join比其他类型的JOIN(如Nested Loop Join或Sort Merge Join)更适合,也是提升SQL性能的重要一环。 总之,Oracle CBO的Hash Join是数据库优化的关键技术之一,通过深入理解其代价模型和执行...
例如,用户可以通过在Hint中指定"join(hash_join, merge_join, hash_join, merge_join)"来指定不同表对之间应使用的连接类型。解析器需要能够识别并处理这些特殊的语法。 - **生成逻辑计划子模块**:这个模块根据...
第2章 风驰电掣——有效缩短SQL优化过程 24 2.1 SQL调优时间都去哪儿了 25 2.1.1 不善于批处理频频忙交互 25 2.1.2 无法抓住主要矛盾瞎折腾 25 2.1.3 未能明确需求目标白费劲 26 2.1.4 没有分析操作难度乱调优...
根据提供的文件内容,我们可以了解到文档《SQL优化指导示例2.pdf》主要讨论了在Vertica数据库系统中如何进行SQL语句的优化。Vertica是一个面向列的高性能分析数据库,特别适合于处理大规模数据集。本文的知识点涉及...
- 对于多表连接的查询,执行计划会说明是使用何种类型的JOIN算法(如Nested Loop、Hash Join等)。 6. 函数的使用 - 如果SQL语句中包含函数,执行计划将体现这些函数对查询性能的影响。 三、性能优化的实践 1. ...
2. **查询优化**:避免使用子查询,尽量用连接(JOIN)操作替代。子查询可能引发多次数据访问,而连接可以通过一次遍历完成。同时,尽量减少对大型表的全表扫描,利用索引来定位数据。 3. **谓词位置**:在WHERE...