有关具体细节,请参见下面的代码分析。


-查询正在执行的SQL语句。


选择的OSUser计算机登录身份,
程序启动所请求的过程,
用户名登录系统的用户名,
SchemaName,
b.cpu_time花费CPU时间,
现状,
b.sql_text执行的SQL,
B.
从V $会话A
左连接V$SQL B a.sql_address = b.address
和a.sql_hash_value = b.hash_value
通过b.cpu_time倒序;


-查询消耗更多CPU的SQL语句
选择*
从v.sql_id(选择,
v.child_number,
v.sql_text,
v.elapsed_time,
v.cpu_time,
v.disk_reads,
等级()在(由v.cpu_time倒序)elapsed_rank
从v $ SQL V)A
Where elapsed_rank < = 10;

-查询比较磁盘消耗的SQL语句

SELECT * FROM(选择v.sql_id,
v.child_number,v.sql_text,
v.elapsed_time,v.cpu_time,
v.disk_reads,
等级()在(由v.disk_reads倒序)elapsed_rank
从一个elapsed_rank V$SQL V 10);

-查询较慢的SQL语句

从中选择*(
选择parsing_user_id,处决,种类
command_type,disk_reads,sql_text V sqlarea美元以disk_reads desc
在rownum < 10

——对未提交事务的Oracle查询

选择A.sid,a.blocking_session,a.last_call_et,a.event,
object_name,
dbms_rowid.rowid_create(1,data_object_id,rfile #,row_wait_block #,row_wait_row #)数据
c.sql_text,c.sql_fulltext
从V $ SESSION A、V C sqlarea美元,dba_objects,V$DATAFILE
在a.blocking_session不空
和a.sql_hash_value = c.hash_value
和row_wait_obj # = object_id和文件# = row_wait_file #;


oracle常用sql语句优化

1和*造成的执行效率

当使用*查询时,尽量减少选择*的使用,

数据库将被解析并转换为整个列。

select count(四。student_id)

从student_info Si(student_id为指标)



select count(*)从student_info寺

执行时,上面的语句明显比没有索引的语句快。

2。避免在索引列上使用计算。

在WHERE子句中,如果索引列是函数的一部分,优化器将使用一个完整的表扫描而不使用索引。

举个例子:

低效率:

从.. * 12 > 25000的部门中选择;

效率高:

从…> 25000 12中选择;

3,备选>

效率高:

SELECT * FROM EMP在deptno > = 4

低效率:

SELECT * FROM EMP在deptno > 3

两者的区别是,前者DBMS将直接跳到第一部等于4,后者将首先确定表3记录扫描到第一部记录大于3。

4。替换或合并(适用于索引列)

通常情况下,替换WHERE子句中的OR将起到更好的效果。使用或将导致对索引列进行完整的表扫描。注意,以上规则只适用于多个索引列。如果没有有效的列查询效率,可以索引,因为您没有选择,只能减少或在以下。例如,loc_id和区域是建立在指数。

效率高:


选择loc_id,loc_desc,区

从位置

在loc_id = 10

联盟

选择loc_id,loc_desc,区

从位置

区域=墨尔本


低效率:


选择loc_id,loc_desc,区

从位置

在loc_id = 10或地区=墨尔本



如果你坚持使用,或者你需要返回最少记录的索引列到前面。

5。替换或使用

这是一个简单的方法来记住规则,而且测试的实际实施效果,Oracle8i数据库,执行路径似乎是相同的。

低效率:

从位置的选择…loc_id = 10或loc_id = 20或loc_id = 30

高效

从位置loc_in(10、20、30)选择;

6。避免在索引列中使用NULL而不是NULL。

7,执行命令

执行将在上下执行。

选择*

从student_info四学生信息表

在寺。school_id = 10大学学生证

和Si。system_id = 100 -系统ID

当WHERE子句被放置时,可以过滤大量数据的条件被放置在底部。

8,从外地的优化:

Oracle从右到左按顺序加载表数据,并且应该将可以排除最多数据的表放在后面(基表)。

例如,在关系查询中,将类表放在后面,结果表放在前面,因为课程表的数据通常相对较少,并且当关联时它可以快速筛选出一些性能数据。

9、索引失败

1,操作失败引起的索引失败。

2、类型转换引起的索引失败

三.由索引列计算引起的问题

4、不空所导致的问题(student_id为指标)

5、通过使指标失效顺序(student_id索引)

6。自动索引的选择

7,!=导致索引失败

索引失败造成8,%