Oracle的SQL语句执行效率问题查找与解决方法
2007-01-22 12:02:48 来源:WEB开发网HASH JOIN在其中一表的连接列上作散列,因此只有另外一个表做排序合并,理论上比SORT JOIN会快些,需要有足够的内存,而且打开了SORT_JOIN_ENABLE参数。(当缺少有用的索引时,哈希连接比嵌套循环连接更加有效。哈希连接可能比排序合并连接更快,因为在这种情况下只有一张源表需要排序。哈希连接也可能比嵌套循环连接更快,因为处理内存中的哈希表比检索B_树索引更加迅速。和排序合并连接、群集连接一样,哈希连接只能用于等价连接。和排序合并连接一样,哈希连接使用内存资源,并且当用于排序内存不足时,会增加临时表空间的I/O(这将使这种连接方法速度变得极慢)。最后,只有基于代价的优化器才可以使用哈希连接。)
索引连接:
No2: AUTOTRACE
•set autotrace 使用步骤:
1、以system登录
2、创建plustrace角色; <your_oracle_home>sqlplusadminplustrce.sql
3、向常规用户授予权限:grant plustrace to <user id>
4、如果没有plan_table也要创建: <your_oracle_home> dbmsadminutlxplan.sql
•set autotrace 选项
on 显示查询结果,执行计划,统计数据
on statistics 显示查询结果,统计数据,不显示执行计划
on explain显示查询结果,执行计划,不显示统计数据
traceonly 显示执行计划和统计结果,但不包括查询结果
traceonly statistics 仅显示统计数据
recursive calls在用户级别和系统级别上生成的递归调用的数量。Oracle维护了一些用于内部处理的表。当oracle需要对这些表进行更改时,它就会在内部生成一个SQL语句,然后这个语句再生成一个递归调用。
db block gets请求一个CURRENT块的次数
consistent gets为一块请求consistent read的次数
physical reads从磁盘读取得数据块总数。这个数量等于“直接物理读取”的值加上读入缓冲区的所有数据块
redo size生成的重做的总数量(以字节为单位)
bytes sent via SQL * Net to client从前台进程发送给客户的总字节数
bytes received via SQL * Net from client通过Oracle Net从客户接收的总字节数
SQL*Net roundtrips to/from client发送给客户和从客户接收的Oracle Net消息的总数
sorts (memory)完全在内存中执行并且不需要任何磁盘写入的排序操作的数量
sorts (disk)至少需要一个磁盘写入的排序操作的数量
rows processed在操作过程中处理的行数
四、最后,使用计时特性来测量和比较处理时间
Set timing on
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››oracle 中 UPDATE nowait 的使用方法
- ››Oracle ORA-12560解决方法
- ››Oracle 10g RAC 常用维护命令
- ››Oracle如何在ASM中定位文件的分布
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
- ››SQL SERVER无法安装成功,sqlstp.log文件提示[未发...
- ››Oracle的DBMS_RANDOM.STRING 的用法
- ››oracle 外部表导入时间日期类型数据,多字段导入
更多精彩
赞助商链接