Oracle SQL优化:选择性、基数与执行计划解析

5星 · 超过95%的资源 需积分: 0 2 下载量 139 浏览量 更新于2024-09-12 收藏 546KB PDF 举报
"Oracle SQL语句优化主要涉及选择性、基数、逻辑读和物理读的概念,以及如何获取和解析执行计划。" I. 概念 A. 选择性和基数是衡量SQL语句效率的重要指标。选择性表示通过某个条件过滤后返回的记录占比,基数则是实际返回的记录数量。这两者之间的关系是基数等于选择性乘以表的总行数。查询基数的计算分为不包含聚合操作和包含聚合操作两种情况。 1. 选择性:代表查询条件筛选后的数据比例,例如,从120条记录中筛选出18条,选择性为0.15。 2. 基数:表示查询结果的记录数,例如,上述情况的基数为18。 3. 查询基数计算:不包含聚合操作时,基数直接由查询结果决定;包含聚合操作时,基数基于聚合前的选择条件计算。 B. 逻辑读和物理读是数据库操作中数据访问的不同层次。 1. 逻辑读:当数据已缓存在内存(buffer cache)中,直接从高速缓存中读取数据块,不涉及磁盘I/O。 2. 物理读:当数据不在高速缓存中,需要从磁盘读取数据块至内存,这涉及到实际的物理I/O操作,效率较低。 II. 执行计划是分析SQL性能的关键工具,通过以下方式获取和解析: A. 使用`explain plan`结合`dbms_xplan.display`或`set autotrace traceonly`来查看执行计划,显示SQL语句的执行步骤及逻辑读统计。 1. `explain plan for`先声明SQL,然后通过`dbms_xplan.display`查看解释计划。 2. 在SQL*Plus或PL/SQL Developer中设置`autotrace`,执行SQL后会显示执行计划和统计信息。 3. 查询Automatic Workload Repository (AWR)或Statspack报告获取历史性能数据。 B. 解释执行计划通常以树形结构呈现,每个节点表示一个操作,如表访问、连接或排序。执行计划的父子关系遵循特定规则: 1. 父节点可有多个子节点,子节点只有一个父节点。 2. 根节点是树的起始,无父节点。 3. 父节点在子节点前面,子节点的缩进表示其层级,最近的父节点与子节点相邻。 举例来说,一个执行计划可能如下: - 操作1(根节点)有3个子节点:2、5和8。 - 操作2有两个子节点:3和4。 - 操作3和4分别作为操作2的子节点。 了解这些概念和方法对于优化Oracle SQL语句至关重要,可以帮助我们减少物理读、提高逻辑读效率,进而提升数据库的整体性能。