15./*+use_concat*/
對查詢中的where後面的or條件進行轉換為union all的組合查詢. (懵懂啊,先存著)
例如:
select /*+use_concat */ * from emp where deptno=10 or empno=7788;
execution plan
0 select statement optimizer=choose (cost=2 card=2 bytes=174)
1 0 table access (full) of 'emp' (cost=2 card=2 bytes=174)
16./*+no_expand*/
對於where後面的or 或者in-list的查詢語句,
no_expand將阻止其基於優化器對其進行擴充套件.
select /*+no_expand*/ * from emp where deptno=10 and job='manager';
execution plan
0 select statement optimizer=choose (cost=2 card=1 bytes=87)
1 0 table access (full) of 'emp' (cost=2 card=1 bytes=87)
17./*+nowrite*/
禁止對查詢塊的查詢重寫操作.
18./*+rewrite*/
可以將檢視作為引數.
19./*+merge(table)*/
能夠對檢視的各個查詢進行相應的合併.
20./*+no_merge(table)*/
對於有可合併的檢視不再合併.
21./*+ordered*/
根據表出現在from中的順序,ordered使oracle依此順序對其連線.
select /*+ordered*/ d.dname, e.ename,e.sal from emp
e,dept
d where e.deptno=d.deptno;
execution plan
0 select statement optimizer=choose (cost=5 card=82 bytes=4510)
1 0 hash join (cost=5 card=82 bytes=4510)
2 1 table access(full) of 'emp' (cost=2 card=82 bytes=2706)
3 1 table access(full) of 'dept' (cost=2 card=82 bytes=1804)
兌換下emp
和dept
的順序,得到
select /*+ordered*/ d.dname, e.ename,e.sal from dept
d,emp
ewhere e.deptno=d.deptno;
execution plan
0 select statement optimizer=choose (cost=5 card=82 bytes=4510)
1 0 hash join (cost=5 card=82 bytes=4510)
2 1 table access (full) of 'dept' (cost=2 card=82 bytes=1804)
3 1 table access (full) of 'emp' (cost=2 card=82 bytes=2706)
對比下沒有使用強制
ordered
排列的情況的執行計畫
select d.dname, e.ename,e.sal from emp e,dept d where e.deptno=d.deptno;
execution plan
0 select statement optimizer=choose
1 0 nested loops
2 1 table access (full) of 'emp'
3 1 table access (by index rowid) of 'dept'
4 3 index (unique scan) of 'pk_dept' (unique)
22./*+use_nl(table)*/
將指定表與巢狀的連線的行源進行連線,並把指定表作為內部表.
select
/*+ordered use_nl(emp)*/
empno,dnamefromemp, deptwhereemp.deptno = dept.deptno;
execution plan
0 select statement optimizer=choose (cost=5 card=82 bytes=3936)
1 0 hash join (cost=5 card=82 bytes=3936)
2 1 table access (full) of 'emp' (cost=2 card=82 bytes=2132)
3 1 table access (full) of 'dept' (cost=2 card=82 bytes=1804 )
對比下使用
dept
作為內部表的執行計畫
(可以看到耗費的時間明顯增加)
select
/*+ordered use_nl(dept)*/
empno,dnamefromemp, deptwhereemp.deptno = dept.deptno;
execution plan
0 select statement optimizer=choose (cost=84 card=82 bytes=3936)
1 0 nested loops (cost=84 card=82 bytes=3936)
2 1 table access (full) of 'emp' (cost=2 card=82 bytes=2132)
3 1 table access (by index rowid) of 'dept' (cost=1 card=1 bytes=22)
4 3 index (unique scan) of 'pk_dept' (unique)
23./*+use_merge(table)*/
將指定的表與其他行源通過合併排序連線方式連線起來(可是執行計畫顯示的是hash join).
select /*+use_merge(emp,dept)*/ e.ename, d.deptno,dname from emp e, dept d
where e.deptno = d.deptno order by e.deptno, d.deptno;
execution plan
0 select statement optimizer=choose (cost=7 card=82 bytes=3444)
1 0 sort (order by) (cost=7 card=82 bytes=3444)
2 1 hash join (cost=5 card=82 bytes=3444)
3 2 table access (full) of 'emp' (cost=2 card=82 bytes=1640)
4 2 table access (full) of 'dept' (cost=2 card=82 bytes=1804)
24./*+use_hash(table)*/
將指定的表與其他行源通過雜湊連線方式連線起來.
select
/*+use_hash(emp,dept) */
empno ,dnamefromemp, deptwhereemp.deptno = dept.deptno;
execution plan
0 select statement optimizer=choose (cost=5 card=82 bytes=3936)
1 0 hash join (cost=5 card=82 bytes=3936)
2 1 table access (full) of 'emp' (cost=2 card=82 bytes=2132)
3 1 table access (full) of 'dept' (cost=2 card=82 bytes=1804)
25./*+driving_site(table)*/
強制與oracle所選擇的位置不同的表進行查詢執行. (
執行計畫看不出任何區別
,字面懵懂
)26./*+leading(table)*/
將指定的表作為連線次序中的首表.
27./*+cache(table)*/
當進行全表掃瞄時,cache提示能夠將表的檢索塊放置在緩衝區快取中最近最少列表lru的最近使用端
28./*+nocache(table)*/
兩種優化查詢的方法
兩種優化表查詢的方法 1 表的查詢順序 針對多表查詢 oracle的解析器按照從右到左的順序處理from子句中的表名,因此from子句中寫在最後的表 基礎表 driving table 將被最先處理。在from子句中包含多個表的情況下,你必須選擇記錄條數最少的表作為基礎表。當oracle處理多個表時...
Oracle執行有兩種方式
oracle資料有兩種方式 1 歸檔方式 archivelog 歸檔方式的目的在於當資料庫發生故障時最大限度恢復資料庫,保以保證不丟失任何已經提交的資料 2 不歸檔方 noarchivelog 只能恢復資料庫到最近的 點 冷備份或者邏輯備份 資料丟失是非常可能的。改變不歸檔方式為歸檔方式 切換資料的...
氣泡排序演算法的兩種優化
氣泡排序 三種實現,兩種優化 首先,我們先介紹bubblesort 就是氣泡排序,氣泡排序大家應該最熟悉不過了 氣泡排序演算法的運作如下 從後往前 1.比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。2.對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最...