當(dāng)前位置:首頁>>開發(fā)編程>>數(shù)據(jù)庫>>新聞內(nèi)容
ORACLE常用傻瓜問題1000問(之五)
作者:CCBZZP 發(fā)布時(shí)間:2003-10-16 22:33:53 文章來源:CSDN

        大家在應(yīng)用ORACLE的時(shí)候可能會(huì)遇到很多看起來不難的問題, 特別對新手來說, 今天我簡單把它總結(jié)一下, 發(fā)布給大家, 希望對大家有幫助! 和大家一起探討, 共同進(jìn)步!

 

        對ORACLE高手來說是不用看的.


   本講主要講的是SQL語句的優(yōu)化方法! 主要基于ORACLE9I的.
174. /*+ALL_ROWS*/
   表明對語句塊選擇基于開銷的優(yōu)化方法,并獲得最佳吞吐量,使資源消耗最小化.
   例如:
   SELECT /*+ALL+_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='CCBZZP';

175. /*+FIRST_ROWS*/
   表明對語句塊選擇基于開銷的優(yōu)化方法,并獲得最佳響應(yīng)時(shí)間,使資源消耗最小化.
   例如:
   SELECT /*+FIRST_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE    EMP_NO='CCBZZP';

176. /*+CHOOSE*/
   表明如果數(shù)據(jù)字典中有訪問表的統(tǒng)計(jì)信息,將基于開銷的優(yōu)化方法,并獲得最佳的吞吐量;
   表明如果數(shù)據(jù)字典中沒有訪問表的統(tǒng)計(jì)信息,將基于規(guī)則開銷的優(yōu)化方法;
   例如:
   SELECT /*+CHOOSE*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='CCBZZP';

177. /*+RULE*/
   表明對語句塊選擇基于規(guī)則的優(yōu)化方法.
   例如:
   SELECT /*+ RULE */ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='CCBZZP';  

178. /*+FULL(TABLE)*/
   表明對表選擇全局掃描的方法.
   例如:
   SELECT /*+FULL(A)*/ EMP_NO,EMP_NAM FROM BSEMPMS A WHERE EMP_NO='CCBZZP';

179. /*+ROWID(TABLE)*/
   提示明確表明對指定表根據(jù)ROWID進(jìn)行訪問.
   例如:
   SELECT /*+ROWID(BSEMPMS)*/ * FROM BSEMPMS WHERE ROWID>='AAAAAAAAAAAAAA'
   AND EMP_NO='CCBZZP';

180. /*+CLUSTER(TABLE)*/
   提示明確表明對指定表選擇簇掃描的訪問方法,它只對簇對象有效.
   例如:
   SELECT  /*+CLUSTER */ BSEMPMS.EMP_NO,DPT_NO FROM BSEMPMS,BSDPTMS
   WHERE DPT_NO='TEC304' AND BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;

181. /*+INDEX(TABLE INDEX_NAME)*/
   表明對表選擇索引的掃描方法.
   例如:
   SELECT /*+INDEX(BSEMPMS SEX_INDEX) USE SEX_INDEX BECAUSE THERE ARE FEWMALE    BSEMPMS */  FROM BSEMPMS WHERE SEX='M';

182. /*+INDEX_ASC(TABLE INDEX_NAME)*/
   表明對表選擇索引升序的掃描方法.
   例如:
   SELECT /*+INDEX_ASC(BSEMPMS PK_BSEMPMS) */  FROM BSEMPMS WHERE DPT_NO='CCBZZP';

183. /*+INDEX_COMBINE*/
   為指定表選擇位圖訪問路經(jīng),如果INDEX_COMBINE中沒有提供作為參數(shù)的索引,將選擇出位圖索引的
   布爾組合方式.
   例如:
   SELECT /*+INDEX_COMBINE(BSEMPMS SAL_BMI HIREDATE_BMI)*/ * FROM BSEMPMS
   WHERE SAL<5000000 AND HIREDATE<SYSDATE;

184. /*+INDEX_JOIN(TABLE INDEX_NAME)*/
   提示明確命令優(yōu)化器使用索引作為訪問路徑.
   例如:
   SELECT /*+INDEX_JOIN(BSEMPMS SAL_HMI HIREDATE_BMI)*/ SAL,HIREDATE
   FROM BSEMPMS WHERE SAL<60000;

185. /*+INDEX_DESC(TABLE INDEX_NAME)*/
   表明對表選擇索引降序的掃描方法.
   例如:
   SELECT /*+INDEX_DESC(BSEMPMS PK_BSEMPMS) */  FROM BSEMPMS WHERE    DPT_NO='CCBZZP';

186. /*+INDEX_FFS(TABLE INDEX_NAME)*/
   對指定的表執(zhí)行快速全索引掃描,而不是全表掃描的辦法.
   例如:
   SELECT /*+INDEX_FFS(BSEMPMS IN_EMPNAM)*/ * FROM BSEMPMS WHERE DPT_NO='TEC305';

187. /*+ADD_EQUAL TABLE INDEX_NAM1,INDEX_NAM2,...*/
   提示明確進(jìn)行執(zhí)行規(guī)劃的選擇,將幾個(gè)單列索引的掃描合起來.
   例如:
   SELECT /*+INDEX_FFS(BSEMPMS IN_DPTNO,IN_EMPNO,IN_SEX)*/ * FROM BSEMPMS WHERE EMP_NO='CCBZZP' AND DPT_NO='TDC306';

188. /*+USE_CONCAT*/
   對查詢中的WHERE后面的OR條件進(jìn)行轉(zhuǎn)換為UNION ALL的組合查詢.
   例如:
   SELECT /*+USE_CONCAT*/ * FROM BSEMPMS WHERE DPT_NO='TDC506' AND SEX='M';

189. /*+NO_EXPAND*/
   對于WHERE后面的OR 或者IN-LIST的查詢語句,NO_EXPAND將阻止其基于優(yōu)化器對其進(jìn)行擴(kuò)展.
   例如:
   SELECT /*+NO_EXPAND*/ * FROM BSEMPMS WHERE  DPT_NO='TDC506' AND SEX='M';

190. /*+NOWRITE*/
   禁止對查詢塊的查詢重寫操作.

191. /*+REWRITE*/
   可以將視圖作為參數(shù).

192. /*+MERGE(TABLE)*/
   能夠?qū)σ晥D的各個(gè)查詢進(jìn)行相應(yīng)的合并.
   例如:
   SELECT /*+MERGE(V) */ A.EMP_NO,A.EMP_NAM,B.DPT_NO FROM BSEMPMS A (SELET DPT_NO
   ,AVG(SAL) AS AVG_SAL FROM BSEMPMS B GROUP BY DPT_NO) V WHERE A.DPT_NO=V.DPT_NO
   AND A.SAL>V.AVG_SAL;

193. /*+NO_MERGE(TABLE)*/
   對于有可合并的視圖不再合并.
   例如:
   SELECT /*+NO_MERGE(V) */ A.EMP_NO,A.EMP_NAM,B.DPT_NO FROM BSEMPMS A (SELET DPT_NO
   ,AVG(SAL) AS AVG_SAL FROM BSEMPMS B GROUP BY DPT_NO) V WHERE A.DPT_NO=V.DPT_NO
   AND A.SAL>V.AVG_SAL;
  
194. /*+ORDERED*/
   根據(jù)表出現(xiàn)在FROM中的順序,ORDERED使ORACLE依此順序?qū)ζ溥B接.
   例如:
   SELECT /*+ORDERED*/ A.COL1,B.COL2,C.COL3 FROM TABLE1 A,TABLE2 B,TABLE3 C
   WHERE A.COL1=B.COL1 AND B.COL1=C.COL1;

195. /*+USE_NL(TABLE)*/
   將指定表與嵌套的連接的行源進(jìn)行連接,并把指定表作為內(nèi)部表.
   例如:
   SELECT /*+ORDERED USE_NL(BSEMPMS)*/ BSDPTMS.DPT_NO,BSEMPMS.EMP_NO,BSEMPMS.EMP_NAM FROM BSEMPMS,BSDPTMS WHERE BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;

196. /*+USE_MERGE(TABLE)*/
   將指定的表與其他行源通過合并排序連接方式連接起來.
   例如:
   SELECT /*+USE_MERGE(BSEMPMS,BSDPTMS)*/ * FROM BSEMPMS,BSDPTMS WHERE
   BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;

197. /*+USE_HASH(TABLE)*/
   將指定的表與其他行源通過哈希連接方式連接起來.
   例如:
   SELECT /*+USE_HASH(BSEMPMS,BSDPTMS)*/ * FROM BSEMPMS,BSDPTMS WHERE
   BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;

198. /*+DRIVING_SITE(TABLE)*/
   強(qiáng)制與ORACLE所選擇的位置不同的表進(jìn)行查詢執(zhí)行.
   例如:
   SELECT /*+DRIVING_SITE(DEPT)*/ * FROM BSEMPMS,DEPT@BSDPTMS WHERE BSEMPMS.DPT_NO=DEPT.DPT_NO;

199. /*+LEADING(TABLE)*/
   將指定的表作為連接次序中的首表.
  
200. /*+CACHE(TABLE)*/
   當(dāng)進(jìn)行全表掃描時(shí),CACHE提示能夠?qū)⒈淼臋z索塊放置在緩沖區(qū)緩存中最近最少列表LRU的最近使用端
   例如:
   SELECT /*+FULL(BSEMPMS) CAHE(BSEMPMS) */ EMP_NAM FROM  BSEMPMS;

201. /*+NOCACHE(TABLE)*/
   當(dāng)進(jìn)行全表掃描時(shí),CACHE提示能夠?qū)⒈淼臋z索塊放置在緩沖區(qū)緩存中最近最少列表LRU的最近使用端
   例如:
   SELECT /*+FULL(BSEMPMS) NOCAHE(BSEMPMS) */ EMP_NAM FROM  BSEMPMS;

202. /*+APPEND*/
   直接插入到表的最后,可以提高速度.
   insert /*+append*/ into test1  select * from test4 ;
203. /*+NOAPPEND*/
   通過在插入語句生存期內(nèi)停止并行模式來啟動(dòng)常規(guī)插入.

   insert /*+noappend*/ into test1  select * from test4 ;

   
   待續(xù)...


最新更新
·SQL Server 2005刪除用戶失敗
·SQL Server中刪除重復(fù)數(shù)據(jù)的
·經(jīng)典SQL語句大全
·SQL Server 2005與ASP.NET/A
·三種查看MySQL數(shù)據(jù)庫版本的方
·SQL Server 2005 Express 遠(yuǎn)
·啟用SQL Server 2005 Expres
·Windows下如何安裝或卸載MyS
·解決MySQL5數(shù)據(jù)庫連接超時(shí)問
·清除SQL Server日志的兩種方
相關(guān)信息
·2008主流數(shù)據(jù)庫產(chǎn)品回顧與展望
·安裝Oracle后配置和啟動(dòng)企業(yè)管理器的方法
·簡單介紹Oracle 9i的16種數(shù)據(jù)類型
·如何在Oracle中導(dǎo)入dmp數(shù)據(jù)庫文件
·把Oracle查詢轉(zhuǎn)換為SQL Server
·輕松修改Oracle數(shù)據(jù)庫表的大小
·實(shí)例講解Oracle里抽取隨機(jī)數(shù)的多種方法
·Oracle在Linux操作系統(tǒng)下的安裝小結(jié)
·用Oracle8i修復(fù)數(shù)據(jù)庫壞塊的三種方法
·在Oracle中導(dǎo)出、導(dǎo)入dmp數(shù)據(jù)庫文件
畫心
愚愛
偏愛
火苗
白狐
畫沙
犯錯(cuò)
歌曲
傳奇
稻香
小酒窩
獅子座
小情歌
全是愛
棉花糖
海豚音
我相信
甩蔥歌
這叫愛
shero
走天涯
琉璃月
Nobody
我愛他
套馬桿
愛是你我
最后一次
少女時(shí)代
灰色頭像
斷橋殘雪
美了美了
狼的誘惑
我很快樂
星月神話
心痛2009
愛丫愛丫
半城煙沙
旗開得勝
郎的誘惑
愛情買賣
2010等你來
我叫小沈陽
i miss you
姑娘我愛你
我們都一樣
其實(shí)很寂寞
我愛雨夜花
變心的玫瑰
犀利哥之歌
你是我的眼
你是我的OK繃
貝多芬的悲傷
哥只是個(gè)傳說
丟了幸福的豬
找個(gè)人來愛我
要嫁就嫁灰太狼
如果這就是愛情
我們沒有在一起
寂寞在唱什么歌
斯琴高麗的傷心
別在我離開之前離開
不是因?yàn)榧拍畔肽?/a>
愛上你等于愛上了錯(cuò)
在心里從此永遠(yuǎn)有個(gè)你
一個(gè)人的寂寞兩個(gè)人的錯(cuò)