原文:
相等連線(內連線)、非等連線、自連線、外連線(左、右、全)
or hash join/merge join/nest loop(cluster join)/index join
相等連線: select * from a, b where a.id = b.id; 這個就屬於內連線。
對於外連線:
oracle
中可以使用「(+) 」來表示,9i可以使用left/right/full outer join
left outer join
:左外關聯
select e.last_name, e.department_id, d.department_name
from employees e
left outer join departments d
on (e.department_id = d.department_id);
等價於select e.last_name, e.department_id, d.department_name
from employees e, departments d
where e.department_id=d.department_id(+)
結果為:所有員工及對應部門的記錄,包括沒有對應部門編號department_id的員工記錄。
right outer join
:右外關聯
select e.last_name, e.department_id, d.department_name
from employees e
right outer join departments d
on (e.department_id = d.department_id);
等價於select e.last_name, e.department_id, d.department_name
from employees e, departments d
where e.department_id(+)=d.department_id
結果為:所有員工及對應部門的記錄,包括沒有任何員工的部門記錄。
full outer join
:全外關聯
select e.last_name, e.department_id, d.department_name
from employees e
full outer join departments d
on (e.department_id = d.department_id);
結果為:所有員工及對應部門的記錄,包括沒有對應部門編號department_id的員工記錄和沒有任何員工的部門記錄。
如果plan_table表不存在,執行$oracle_home/rdbms/admin/utlxplan.sql建立plan_table表。
如果plustrace角色不存在,執行$oracle_home/sqlplus/admin/plustrce.sql
1.sqlplus / as sysdba
set autotrace on;
執行sql
3. 如何使用cbo,cbo與rule的區別
if初始化引數 optimizer_mode = choose then
--(8i default)
if做過錶分析
then
優化器 optimizer=cbo(cost);
else
優化器 optimizer=rbo(rule);
end if;
end if;
區別: rbo
根據規則選擇最佳執行路徑來執行查詢。
cbo根據表統計找到最低成本的訪問資料的方法確定執行計畫。
使用cbo需要注意:
i)需要經常對錶進行analyze命令進行分析統計;
ii)需要穩定執行計畫;
iii)
需要使用提示(hint);
使用rule需要注意:
i)選擇最有效率的表名順序
ii)優化sql的寫法;
在optimizer_mode=choose時,如果表有統計資訊(分割槽表外),優化器將選擇cbo,否則選rbo。
rbo遵循簡單的分級方法學,使用15種級別要點,當接收到查詢,優化器將評估使用到的要點數目,然後選擇最佳級別(最少的數量)的執行路徑來執行查詢。
cbo嘗試找到最低成本的訪問資料的方法,為了最大的吞吐量或最快的初始響應時間,計算使用不同的執行計畫的成本,並選擇成本最低的乙個,關於表的資料內容的統計被用於確定執行計畫。
使用cpu多的使用者session
select a.sid, spid, status, substr (a.program, 1, 40) prog, a.terminal,a.sql_id, osuser, value / 60 / 100 value
from v$session a, v$process b, v$sesstat c
where c.statistic# = 12 and c.sid = a.sid and a.paddr = b.addr
order by value desc;
select sql_text from v$sql
where disk_reads > 1000 or (executions > 0 and buffer_gets/executions > 30000);
利用trace 跟蹤
alter session set sqltrace on;
column sql format a200;
select
machine, sql_text sql
from v$sqltext a, v$session b
where address = sql_address
and machine = '&a'
order by hash_value, piece;
exec dbms_system.set_sql_trace_in_session(sid,serial#,&sql_trace);
select sid,serial# from v$session where sid = (select sid from v$mystat where rownum = 1);
exec dbms_system.set_ev(&sid,&serial#,&event_10046,&level_12,'');
面試題(十)Oracle
oracle面試問題 技術篇 1.解釋冷備份和熱備份的不同點以及各自的優點 解答 熱備份針對歸檔模式的資料庫,在資料庫仍舊處於工作狀態時進行備份。而冷備份指在資料庫關閉後,進行備份,適用於所有模式的資料庫。熱備份的優點在於當備份時,資料庫仍舊可以被使用並且可以將資料庫恢復到任意乙個時間點。冷備份的優...
Oracle 常用面試題
1.解釋冷備份和熱備份的不同點以及各自的優點 解答 熱備份針對歸檔模式的資料庫,在資料庫仍舊處於工作狀態時進行備份。而冷備份指在資料庫關閉後,進行備份,適用於所有模式的 資料庫。熱備份的優點在於當備份時,資料庫仍舊可以被使用並且可以將資料庫恢復到任意乙個時間點。冷備份的優點在於它的備份和恢復 操作相...
oracle面試題集
oracle 面試問題 技術篇 1.解釋冷備份和熱備份的不同點以及各自的優點 解答 熱備份針對歸檔模式的資料庫,在資料庫仍舊處於工作狀態時進行備份。而冷備份指在資料庫關閉後,進行備份,適用於所有模式的資料庫。熱備份的優點在於當備份時,資料庫仍舊可以被使用並且可以將資料庫恢復到任意乙個時間點。冷備份的...