ORACLE 直接用SQL 很快 ,用视图很慢
发布网友
发布时间:2022-04-08 11:25
我来回答
共4个回答
懂视网
时间:2022-04-08 15:46
SELECT o.object_name,
o.object_type,
a.event,
SUM(a.wait_time + a.time_waited) total_wait_time
FROM v$active_session_history a, dba_objects o
WHERE a.sample_time BETWEEN SYSDATE - 30 / 2880 AND SYSDATE
AND a.current_obj# = o.object_id
GROUP BY o.object_name, o.object_type, a.event
ORDER BY total_wait_time;
--列出数据库中最后15分钟内最重要的等待事件
SELECT a.event,
SUM(a.wait_time + a.time_waited) total_wait_time
FROM v$active_session_history a
WHERE a.sample_time BETWEEN SYSDATE - 30 / 2880 AND SYSDATE
GROUP BY a.event
ORDER BY total_wait_time DESC;
--等待最多的用户
SELECT s.sid,
s.username,
SUM(a.wait_time + a.time_waited) total_wait_time
FROM v$active_session_history a,v$session s
WHERE a.sample_time BETWEEN SYSDATE - 30 / 2880 AND SYSDATE
AND a.session_id = s.sid
GROUP BY s.sid,s.username
ORDER BY total_wait_time DESC;
--确定等待最多的sql
SELECT a.user_id,
s.sql_text,
d.username,
SUM(a.wait_time + a.time_waited) total_wait_time
FROM v$active_session_history a, v$sqlarea s, dba_users d
WHERE a.sample_time BETWEEN SYSDATE - 30 / 2880 AND SYSDATE
AND a.sql_id = s.sql_id
AND a.user_id = d.user_id
GROUP BY a.user_id, s.sql_text, d.username;
dba_hist_active_sess_history:每60分钟,MMON后台进程都要刷新过滤了得ASH数据到磁盘,使其成为按小时的AWR快照的一部分。若ASH缓冲区已满,
则MMML后台进程进行数据的刷新。ASH数据被刷新到磁盘后,就不能在v$active_session_history视图中看到它了。此时要查看历史数据,就必须通过
dba_hist_active_sess_history视图。
段级动态性能视图:使用它们可以找出哪些表和索引正在使用大量资源或具有大量的等待。
v$segstat_name
v$segstat
v$segment_statistics
oracle一视图性能问题
标签:
热心网友
时间:2022-04-08 12:54
原因:
"SELECT * FROM (${你的sql语句})a" 等价于 " SELECT * FROM ${由你的sql创建的视图名称}"
也就是说, 属于一个查询里面套用子查询了, 得把你的sql语句全部查出来. 所以用
"EXPLAIN ${你的sql语句}" 你会看到有 "Using temporary; Using filesort" 全表查
而
"${你的sql语句}"
直接执行的话, 相当于就少了一层. 不用全表查, 可以很轻松的走索引了(如果有的话)
以上纯属个人见解, 若有不对, 还请大神们纠正.
热心网友
时间:2022-04-08 14:12
视图不会对查询速度造成任何影响,关键是要看你的sql语句.视图只是方便你的操作,将复杂的表连接在视图中完成。
热心网友
时间:2022-04-08 15:47
我也遇到了这个问题,楼主解决了没有啊