posts - 4, comments - 5, trackbacks - 0, articles - 10

          Oracle Sql提示學(xué)習(xí)筆記

          Posted on 2006-11-16 17:05 勇敢的心 閱讀(2198) 評(píng)論(1)  編輯  收藏 所屬分類(lèi): Oracle
          1、FIRST_ROWS
          ?? 指示優(yōu)化器盡可能快地返回前n行記錄,提高響應(yīng)速度。如果沒(méi)有指定參數(shù),則返回第一行。該提示對(duì)Update和Insert無(wú)效,對(duì)包含塊操作的select語(yǔ)句無(wú)效,如排序和group。 這樣的語(yǔ)句不能優(yōu)化最佳響應(yīng)時(shí)間,因?yàn)镺racle在返回第一行之前,必須獲得所有的記錄。如果在這種情況下使用了該提示,優(yōu)化器會(huì)優(yōu)化最佳吞吐量(相當(dāng)于ALL_ROWS提示)。
          ?
          2、FULL
          ?? 指示優(yōu)化器執(zhí)行全表掃描,即使有索引,也不會(huì)走索引。
          ??
          ??? SELECT ? /* +?FULL(e)? */ ?employee_id,?last_name
          ??????
          FROM ?hr.employees?e? WHERE ?last_name? LIKE ?:b1;
          ??
          ?? 注意:如果表有別名,則必須使用別名。并且即使表加上了schema名稱(chēng),在提示中也不能指定schema名稱(chēng)。
          ?
          3、HASH
          ?? 指示優(yōu)化器使用Hash掃描表,只適用于表簇中的表。
          ?
          4、INDEX
          ?? 指示優(yōu)化器適用Index掃描表,適用于函數(shù)、域、B樹(shù)、位圖和位圖聯(lián)合索引。
          ?? Index提示遵循以下規(guī)范:
          ?? a、如果Index提示指定單個(gè)的索引,那么數(shù)據(jù)庫(kù)執(zhí)行該索引上的掃描,優(yōu)化器不會(huì)執(zhí)行全表掃描或者表上的其他索引。
          ?? b、對(duì)于指定了多個(gè)索引的組合的Index提示,Oracle推薦使用INDEX_COMBINE而不是INDEX提示,因?yàn)樗油ㄓ茫绻鸌ndex提示指定了index列表,那么優(yōu)化器會(huì)考慮走每個(gè)索引的代碼,并從中選擇代價(jià)最小的一條索引,如果掃描多個(gè)index的代價(jià)最小,那么優(yōu)化器會(huì)掃描該個(gè)索引列表。優(yōu)化器不會(huì)走全表掃描或者沒(méi)有在index列表上的索引。
          ?? c、如果Index提示沒(méi)有指定Index,優(yōu)化器會(huì)評(píng)估掃描每個(gè)Index的代價(jià),并選擇代價(jià)最小的Index,如果組合Index代價(jià)最小,那么優(yōu)化器會(huì)選擇掃描多個(gè)索引,并合并結(jié)果集。優(yōu)化器不會(huì)走全表掃描。
          ?
          ??? SELECT ? /* +?INDEX?(employees?emp_department_ix) */ ??employee_id,?department_id
          ????
          FROM ?employees? WHERE ?department_id? > ? 50 ;
          ?
          5、INDEX_ASC
          ?? 按索引值的升序方向掃描索引,其他參數(shù)與INDEX 提示完全一樣。
          ?
          6、INDEX_COMBINE
          ?? 聯(lián)合索引提示。索引規(guī)則與INDEX提示一樣。
          ??
          ??? SELECT ? /* +?INDEX_COMBINE(e?emp_manager_ix?emp_department_ix)? */ ? *
          FROM ?employees?e
          WHERE ?manager_id? = ? 108
          OR ?department_id? = ? 110 ;
          ?
          7、INDEX_DESC
          ? 降序INDEX提示。
          ?
          SELECT ? /* +?INDEX_DESC(e?emp_name_ix)? */ ? *
          FROM ?employees?e;
          ?
          8、INDEX_FFS
          ? 指示優(yōu)化器執(zhí)行快速全索引掃描,而不是全表掃描。
          ?
          SELECT ? /* +?INDEX_FFS(e?emp_name_ix)? */ ?first_name
          FROM ?employees?e;
          ?
          9、INDEX_JOIN
          ??以INDEX JOIN的方式掃描,必須存在足夠少的INDEX,這些索引包含著查詢(xún)中所有的列。
          ?
          SELECT ? /* +?INDEX_JOIN(e?emp_manager_ix?emp_department_ix)? */ ?department_id
          FROM ?employees?e? WHERE ?manager_id? < ? 110 ? AND ?department_id? < ? 50 ;
          ?
          10、INDEX_SS
          ? 索引跳躍掃描提示。
          ?
          11、LEADING
          ? 指定特定的表放在執(zhí)行計(jì)劃的前面,它比ORDERED提示更加通用。
          ? 如果因?yàn)镴oin路線(xiàn)的依賴(lài)關(guān)系而不能首先被Join,提示就會(huì)被忽略;如果指定了兩個(gè)或者多個(gè)沖突的LEADING提示,則他們都會(huì)被忽略;如果指定了ORDERED提示,那么LEADING就會(huì)被忽略。
          ?
          12、MERGE
          ??將視圖合并到查詢(xún)。
          ? 如果視圖查詢(xún)語(yǔ)句包含GROUP BY子句或者SELECT語(yǔ)句中用到了 DISTINCT,那么優(yōu)化器能夠?qū)⒁晥D合并到查詢(xún)語(yǔ)句中,合成的合并也能夠合并IN子查詢(xún),如果IN子查詢(xún)沒(méi)有關(guān)聯(lián)。
          ?
          ?? SELECT ? /* +?MERGE(v)? */ ?e1.last_name,?e1.salary,?v.avg_salary
          FROM ?employees?e1,
          (
          SELECT ?department_id,? avg (salary)?avg_salary
          FROM ?employees?e2
          GROUP ? BY ?department_id)?v
          WHERE ?e1.department_id? = ?v.department_id? AND ?e1.salary? > ?v.avg_salary;
          ?
          13、NOAPPEND
          ?? 在并行模式中使用常規(guī)插入方法。
          ?
          14、NOCACHE
          ?
          15、NO_EXPAND
          ?
          16、NO_FACT
          ?
          17、NO_INDEX
          ?
          18、NO_INDEX_SS
          ?
          19、NO_MERGE
          ?
          20、NO_PARALLEL
          ?? 覆蓋了使用DDL語(yǔ)言創(chuàng)建或者更改table的PARALLEL參數(shù)的設(shè)置。
          ?
          21、NO_PARALLEL_INDEX
          ?? 覆蓋了使用DDL語(yǔ)言創(chuàng)建或者更改index的PARALLEL參數(shù)的設(shè)置。
          ?
          22、NO_PUSH_PRED
          ??
          23、NO_PUSH_SUBQ
          ?
          24、NO_PX_JOIN_FILTER
          ??? 阻止優(yōu)化器使用并行聯(lián)合位圖過(guò)濾器
          ?
          25、NO_REWRITE
          ??? 使查詢(xún)重寫(xiě)失效
          ?
          26、NO_QUERY_TRANSFORMATION
          ??? 跳過(guò)所有查詢(xún)轉(zhuǎn)換,包括但不限于:OR-expansion、視圖合并、無(wú)嵌套子查詢(xún)、星型轉(zhuǎn)換和物化視圖重寫(xiě)。
          ?
          27、NO_STAR_TRANSFORMATION
          ?
          28、NO_UNNEST
          ?
          29、NO_USE_HASH
          ?
          30、ORDERED
          ?? 指示優(yōu)化器按照FROM子句出現(xiàn)的表順序join表。Oracle推薦使用LEADING提示。
          ?
          31、PARALLEL
          ?? 指示優(yōu)化器使用指定數(shù)目的服務(wù)器去執(zhí)行并行操作,包括SELECT、INSERT、MERGE、UPDATE和DELETE部分的語(yǔ)句和表掃描部分都可使用。
          ?? 注意:如果發(fā)生sort或者group,那么服務(wù)器的數(shù)量應(yīng)該是提示指定的兩倍。
          ?? 如果任何并行都被禁止,那么提示就會(huì)被忽略。
          ?? 如果指定了DEFAULT或者沒(méi)有指定任何值,那么查詢(xún)器就會(huì)去檢查初始參數(shù)的設(shè)置來(lái)決定并行度。
          ?? 臨時(shí)表上的該提示將會(huì)被忽略。
          ?
          32、PARALLEL_INDEX
          ?? 為分區(qū)索引指定并行索引掃描的數(shù)量。示例:
          ??? SELECT /*+ PARALLEL_INDEX(table1, index1, 3) */
          ?
          33、PQ_DISTRIBUTE
          ?
          34、PUSH_PRED
          ?
          35、PUSH_SUBQ
          ?
          36、REWRITE
          ??? 對(duì)物化視圖使用查詢(xún)重寫(xiě)。

          Feedback

          # re: Oracle Sql提示學(xué)習(xí)筆記  回復(fù)  更多評(píng)論   

          2009-04-08 16:59 by YCC
          謝謝!對(duì)我有用.

          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 定陶县| 江西省| 清远市| 徐水县| 中西区| 海林市| 瓮安县| 浙江省| 怀远县| 常德市| 平远县| 桂平市| 河池市| 南江县| 清远市| 阿合奇县| 鹿泉市| 尼勒克县| 秦安县| 巴南区| 双桥区| 城口县| 秭归县| 正蓝旗| 安龙县| 金溪县| 精河县| 苍山县| 唐山市| 元阳县| 辽宁省| 平昌县| 太仓市| 广水市| 固原市| 朝阳市| 平阴县| 安仁县| 黄平县| 共和县| 井陉县|