SQL hint中的ORDER與Leading(zt)
關於LEADING、ORDERED:
/*+ORDERED*/提示按照from後表的順序執行。
/*+LEADING(table1 table2 ...)*/提示按照指定順序執行。
通常在sql中出現了join的時候,可能需要用到這兩個hint,會比較有用。這裡引用下在Taobao DBA Team上看到的一個例子:
2 from table_detail t,
3 table(cast(str2varlist('123') as vartabletype)) t2
4 where t.id = t2.column_value;
Execution Plan
----------------------------------------------------------
Plan hash value: 31598426
----------------------------------------------------------
Operation | Name |Rows |Bytes|Cost(%CPU)|Time|
----------------------------------------------------------
SELECT STATEMENT | |784K|124M|2132(1)|00:00:26|
NESTED LOOPS | |784K|124M|2132(1)|00:00:26|
TABLE ACCESS FULL | table_detail|96 |15744| 11(0)|00:00:01|
COLLECTION ITERATOR PICKLER FETCH| STR2VARLIST | | | | |
-------------------------------------------------------------
t2是個虛擬的表,沒有準確的統計資訊,很容易出現執行計劃錯誤,這種sql最好要用hint來固化其執行計劃。
使用/*+ ORDERED use_nl(t,t2) */提示。
2 from table(cast(str2varlist('123') as vartabletype)) t2,
3 table_detail t
4 where t.id = t2.column_value;
Execution Plan
----------------------------------------------------------
Plan hash value: 2272521841
-------------------------------------------------------------------------------
Operation | Name Rows |Bytes |Cost (%CPU)|Time|
-------------------------------------------------- ----------------------------
SELECT STATEMENT | |784K| 124M|25 (0)|00:00:01|
TABLE ACCESS BY INDEX ROWID | table_detail | 96 |15744| 1 (0)|00:00:01|
NESTED LOOPS | |784K| 124M|25 (0)|00:00:01|
COLLECTION ITERATOR PICKLER FETCH| STR2VARLIST | | | | |
INDEX RANGE SCAN | IND_deail_id | 1 | | 1 (0)|00:00:01|
-------------------------------------------------- ----------------------------
2 from table_detail t,
3 table(cast(str2varlist('123') as vartabletype)) t2
4 where t.id = t2.column_value;
Execution Plan
----------------------------------------------------------
Plan hash value: 2272521841
-------------------------------------------------------------------------------
Operation | Name Rows |Bytes |Cost (%CPU)|Time|
-------------------------------------------------- ----------------------------
SELECT STATEMENT | |784K| 124M|25 (0)|00:00:01|
TABLE ACCESS BY INDEX ROWID | table_detail | 96 |15744| 1 (0)|00:00:01|
NESTED LOOPS | |784K| 124M|25 (0)|00:00:01|
COLLECTION ITERATOR PICKLER FETCH| STR2VARLIST | | | | |
INDEX RANGE SCAN | IND_deail_id | 1 | | 1 (0)|00:00:01|
跟蹤對應的session,客戶提供對應session sid為877
SQL>select sid,serial# from v$session where sid=877;
SQL>exec sys.dbms_system.set_sql_trace_in_session(877,1687,true);
生成trace檔案scjfzw1_ora_18741.trc 針對該trace檔案進行分析,
$tkprof scjfzw1_ora_18741.trc scjfzw1_ora_18741.txt
檢視執行計劃也可以用:
SQL> set lines 200
SQL> set pages 80
SQL> explain plan for
SQL> set lines 200 pages 80
SQL> spool
SQL> select * from table(dbms_xplan.display);
explain plan set statement_id='jzmu' for select * from a;
select * from table(dbms_xplan.display(null,'jzmu',null));
SQL> spool off
通過sql_id,檢視某一個特定sql的執行計劃
SQL>select * from TABLE(dbms_xplan.display_cursor('&SQL_ID'));
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/730796/viewspace-580368/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle hint_leadingOracle
- Oracle常見hint(leading)Oracle
- Oracle中的sql hintOracleSQL
- zt_Oracle hint driving_site Hint的用法Oracle
- order by在SQL Server與Oracle中的一個區別SQLServerOracle
- 【sql hint 提示】SQL
- sql hint articleSQL
- Oralce SQL hintSQL
- [zt] Oracle與SQL Server的互連OracleSQLServer
- MySQL SQL hint 提示MySql
- 檢視SQL PROFILE使用的HINTSQL
- SQL中rownum和order by的執行順序的問題SQL
- 【HINT】使用“NO_INDEX ”Hint提示避免SQL使用特定索引IndexSQL索引
- 【SQL 學習】排序問題之order by與索引排序SQL排序索引
- openGauss 支援SQL-hintSQL
- 使用Oracle Hint提示來更改執行計劃 ZTOracle
- zt_A new hint in 10gR2: OPT_PARAM
- 使用leading(,)優化sql執行計劃優化SQL
- 關於append sql hint的實驗APPSQL
- 【sql調優之執行計劃】使用hint(五)Hint for parallelSQLParallel
- 11G new SQL hint大全SQL
- [zt] 使用SQL Server中的Linked Server及Remote ServerSQLServerREM
- [zt] 揭祕SQL Server 2000中的Bookmark LookupSQLServer
- [zt] SQL存取Oracle當中掃描資料的方法SQLOracle
- Oracle中“HINT”的使用方法Oracle
- SQL、Linux 指令碼與 Ruby 之比較 ZTSQLLinux指令碼
- 如何理解樹狀sql中ORDER SIBLINGS BY排序的含義SQL排序
- Oracle中Hint隨記Oracle
- SQLServer使用case when中的order bySQLServer
- MySQL中ORDER BY與LIMIT一起使用(有坑)MySqlMIT
- oracle 通過sql profile為sql語句加hintOracleSQL
- 轉摘_使用leading(,)優化sql執行計劃優化SQL
- Oracle 12c 新SQL提示(hint)OracleSQL
- 使用hint來調優sql語句SQL
- [zt] 影響SQL效能的原因SQL
- 產生top sql的原因(zt)SQL
- 關於order by中的資料排序排序
- Sql最佳化(五) hint(提示)介紹SQL