日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

有時Oracle不用索引來查找數(shù)據(jù)的原因

瀏覽:258日期:2023-11-15 08:58:01
當(dāng)你運用 SQL 語言,向數(shù)據(jù)庫發(fā)布一條查詢語句時, Oracle 將伴隨產(chǎn)生一個“執(zhí)行計劃”,也就是該語句將通過何種數(shù)據(jù)搜索方案執(zhí)行,是通過全表掃描、還是通過索引搜尋等其它方式。搜索方案的選用與 ORACLE 的優(yōu)化器息息相關(guān)。 SQL 語句的執(zhí)行步驟。 1 語法分析 分析語句的語法是否符合規(guī)范,衡量語句中各表達式的意義。 2 語義分析 檢查語句中涉及的所有數(shù)據(jù)庫對象是否存在,且用戶有相應(yīng)的權(quán)限。 3 視圖轉(zhuǎn)換 將涉及視圖的查詢語句轉(zhuǎn)換為相應(yīng)的對基表查詢語句。 4 表達式轉(zhuǎn)換 將復(fù)雜的 SQL 表達式轉(zhuǎn)換為較簡單的等效連接表達式。 5 選擇優(yōu)化器 不同的優(yōu)化器一般產(chǎn)生不同的“執(zhí)行計劃” 6 選擇連接方式 ORACLE 有三種連接方式,對多表連接 ORACLE 可選擇適當(dāng)?shù)倪B接方式。 7 選擇連接順序 對多表連接 ORACLE 選擇哪一對表先連接,選擇這兩表中哪個表做為源數(shù)據(jù)表。 8 選擇數(shù)據(jù)的搜索路徑 根據(jù)以上條件選擇合適的數(shù)據(jù)搜索路徑,如是選用全表搜索還是利用索引或是其他的方式。 9 運行“執(zhí)行計劃”。 ORACLE 的優(yōu)化器 ORACLE 有兩種優(yōu)化器:基于規(guī)則的優(yōu)化器( RBO , Rule Based Optimizer ),和基于代價的優(yōu)化器( CBO , Cost Based Optimizer )。 RBO 自 ORACLE 6 版以來被采用,有著一套嚴(yán)格的使用規(guī)則,只要你按照它去寫 SQL 語句,無論數(shù)據(jù)表中的內(nèi)容怎樣,也不會影響到你的“執(zhí)行計劃”,也就是說對數(shù)據(jù)不“敏感”, ORACLE 公司已經(jīng)不再發(fā)展這種技術(shù)了。 CBO 自 ORACLE 7 版被引入, ORACLE 自 7 版以來采用的許多新技術(shù)都是基于 CBO 的,如星型連接排列查詢,哈希連接查詢,和并行查詢等。 CBO 計算各種可能“執(zhí)行計劃”的“代價”,即 cost ,從中選用 cost 最低的方案,作為實際運行方案。各“執(zhí)行計劃”的 cost 的計算根據(jù),依靠于數(shù)據(jù)表中數(shù)據(jù)的統(tǒng)計分布, ORACLE 數(shù)據(jù)庫本身對該統(tǒng)計分布并不清楚,須要分析表和相關(guān)的索引,才能搜集到 CBO 所需的數(shù)據(jù)。 一般而言, CBO 所選擇的“執(zhí)行計劃”都不會比 RBO 的“執(zhí)行計劃”差,而且相對而言, CBO 對程序員的要求沒有 RBO 那么苛刻,節(jié)省了程序員為了從多個可能的“執(zhí)行計劃”中選擇一個最優(yōu)的方案而花費的調(diào)試時間,但在某些場合下也會存在問題。 較典型的問題有:有時,表明明建有索引,但查詢過程顯然沒有用到相關(guān)的索引,導(dǎo)致查詢過程耗時漫長,占用資源巨大,問題到底出在哪兒呢?按照以下順序查找,基本上能發(fā)現(xiàn)原因所在。 查找原因的步驟 首先,我們要確定數(shù)據(jù)庫運行在何種優(yōu)化模式下,相應(yīng)的參數(shù)是: optimizer_mode 。可在 svrmgrl 中運行“ show parameter optimizer_mode' 來查看。 ORACLE V7 以來缺省的設(shè)置應(yīng)是 'choose' ,即假如對已分析的表查詢的話選擇 CBO ,否則選擇 RBO 。假如該參數(shù)設(shè)為“ rule ”,則不論表是否分析過,一概選用 RBO ,除非在語句中用 hint 強制。 其次,檢查被索引的列或組合索引的首列是否出現(xiàn)在 PL/SQL 語句的 WHERE 子句中,這是“執(zhí)行計劃”能用到相關(guān)索引的必要條件。 第三,看采用了哪種類型的連接方式。 ORACLE 的共有 Sort Merge Join ( SMJ )、 Hash Join ( HJ )和 Nested Loop Join ( NL )。在兩張表連接,且內(nèi)表的目標(biāo)列上建有索引時,只有 Nested Loop 才能有效地利用到該索引。 SMJ 即使相關(guān)列上建有索引,最多只能因索引的存在,避免數(shù)據(jù)排序過程。 HJ 由于須做 HASH 運算,索引的存在對數(shù)據(jù)查詢速度幾乎沒有影響。 第四,看連接順序是否答應(yīng)使用相關(guān)索引。假設(shè)表 emp 的 deptno 列上有索引,表 dept 的列 deptno 上無索引, WHERE 語句有 emp.deptno=dept.deptno 條件。在做 NL 連接時, emp 做為外表,先被訪問,由于連接機制原因,外表的數(shù)據(jù)訪問方式是全表掃描, emp.deptno 上的索引顯然是用不上,最多在其上做索引全掃描或索引快速全掃描。 第五,是否用到系統(tǒng)數(shù)據(jù)字典表或視圖。由于系統(tǒng)數(shù)據(jù)字典表都未被分析過,可能導(dǎo)致極差的“執(zhí)行計劃”。但是不要擅自對數(shù)據(jù)字典表做分析,否則可能導(dǎo)致死鎖,或系統(tǒng)性能下降。 第六,是否存在潛在的數(shù)據(jù)類型轉(zhuǎn)換。如將字符型數(shù)據(jù)與數(shù)值型數(shù)據(jù)比較, ORACLE 會自動將字符型用 to_number() 函數(shù)進行轉(zhuǎn)換,從而導(dǎo)致第六種現(xiàn)象的發(fā)生。 第七,是否為表和相關(guān)的索引搜集足夠的統(tǒng)計數(shù)據(jù)。對數(shù)據(jù)經(jīng)常有增、刪、改的表最好定期對表和索引進行分析,可用 SQL 語句“ analyze table xxxx compute statistics for all indexes;' 。 ORACLE 把握了充分反映實際的統(tǒng)計數(shù)據(jù),才有可能做出正確的選擇。第八,索引列的選擇性不高。 我們假設(shè)典型情況,有表 emp ,共有一百萬行數(shù)據(jù),但其中的 emp.deptno 列,數(shù)據(jù)只有 4 種不同的值,如 10 、 20 、 30 、 40 。雖然 emp 數(shù)據(jù)行有很多, ORACLE 缺省認(rèn)定表中列的值是在所有數(shù)據(jù)行均勻分布的,也就是說每種 deptno 值各有 25 萬數(shù)據(jù)行與之對應(yīng)。假設(shè) SQL 搜索條件 DEPTNO=10 ,利用 deptno 列上的索引進行數(shù)據(jù)搜索效率,往往不比全表掃描的高, ORACLE 理所當(dāng)然對索引“視而不見”,認(rèn)為該索引的選擇性不高。 但我們考慮另一種情況,假如一百萬數(shù)據(jù)行實際不是在 4 種 deptno 值間平均分配,其中有 99 萬行對應(yīng)著值 10 , 5000 行對應(yīng)值 20 , 3000 行對應(yīng)值 30 , 2000 行對應(yīng)值 40 。在這種數(shù)據(jù)分布圖案中對除值為 10 外的其它 deptno 值搜索時,毫無疑問,假如索引能被應(yīng)用,那么效率會高出很多。我們可以采用對該索引列進行單獨分析,或用 analyze 語句對該列建立直方圖,對該列搜集足夠的統(tǒng)計數(shù)據(jù),使 ORACLE 在搜索選擇性較高的值能用上索引。 第九,索引列值是否可為空( NULL )。假如索引列值可以是空值,在 SQL 語句中那些需要返回 NULL 值的操作,將不會用到索引,如 COUNT ( * ),而是用全表掃描。這是因為索引中存儲值不能為全空。 第十一,看是否有用到并行查詢( PQO )。并行查詢將不會用到索引。如我們想要用到 A 表的 IND_COL1 索引的話,可采用以下方式: “ SELECT /*+ INDEX ( A IND_COL1 ) */ * FROM A WHERE COL1 = XXX;'注重,注釋符必須跟在 SELECT 之后,且注釋中的“ + ”要緊跟著注釋起始符“ /* ”或“ -- ”,否則 hint 就被認(rèn)為是一般注釋,對 PL/SQL 語句的執(zhí)行不產(chǎn)生任何影響。 一種是 EXPLAIN TABLE 方式。用戶必須首先在自己的模式( SCHEMA )下,建立 PLAN_TABLE 表,執(zhí)行計劃的每一步驟都將記錄在該表中,建表 SQL 腳本為在 ${ORACLE_HOME}/rdbms/admin/ 下的 utlxplan.sql 。 打開 SQL*PLUS ,輸入“ SET AUTOTRACE ON ”,然后運行待調(diào)試的 SQL 語句。在給出查詢結(jié)果后, ORACLE 將顯示相應(yīng)的“執(zhí)行計劃”,包括優(yōu)化器類型、執(zhí)行代價、連接方式、連接順序、數(shù)據(jù)搜索路徑以及相應(yīng)的連續(xù)讀、物理讀等資源代價。 假如我們不能確定需要跟蹤的具體 SQL 語句,比如某個應(yīng)用使用一段時間后,響應(yīng)速度忽然變慢。我們這時可以利用 ORACLE 提供的另一個有力工具 TKPROF ,對應(yīng)用的執(zhí)行過程全程跟蹤。我們要先在系統(tǒng)視圖 V$SESSION 中,可根據(jù) USERID 或 MACHINE ,查出相應(yīng)的 SID 和 SERIAL# 。以 SYS 或其他有執(zhí)行 DBMS_SYSTEM 程序包的用戶連接數(shù)據(jù)庫,執(zhí)行“ EXECUTE DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION ( SID , SERIAL# , TRUE );”。 然后運行應(yīng)用程序,這時在服務(wù)器端,數(shù)據(jù)庫參數(shù)“ USER_DUMP_DEST ”指示的目錄下,會生成 ora__xxxx.trc 文件,其中 xxxx 為被跟蹤應(yīng)用的操作系統(tǒng)進程號。 應(yīng)用程序執(zhí)行完成后,用命令 tkprof 對該文件進行分析。命令示例:“ tkprof tracefile outputfile explain=userid/passWord' 。在操作系統(tǒng) ORACLE 用戶下,鍵入“ tkprof ”,會有具體的命令幫助。分析后的輸出文件 outputfile 中,有每一條 PL/SQL 語句的“執(zhí)行計劃”、 CPU 占用、物理讀次數(shù)、邏輯讀次數(shù)、執(zhí)行時長等重要信息。根據(jù)輸出文件的信息,我們可以很快發(fā)現(xiàn)應(yīng)用中哪條 PL/SQL 語句是問題的癥結(jié)所在。
標(biāo)簽: Oracle 數(shù)據(jù)庫
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
午夜在线视频观看日韩17c| 精品国产免费人成网站| 中文在线一区| 91精品高清| 亚洲综合日本| 欧美成人精品| 亚洲成人一区| 亚洲一区二区三区免费在线观看 | 91亚洲精品在看在线观看高清| 美女被久久久| 日日夜夜免费精品| 国产精品最新| 精品一区二区男人吃奶| av资源中文在线| 国产一区亚洲| 在线看片日韩| 国产成人精品亚洲日本在线观看| 亚洲欧美网站| 国产aⅴ精品一区二区三区久久 | 国产精品久久观看| 亚洲欧洲av| 久久精品青草| 久久伊人久久| 精品国产亚洲一区二区三区大结局| 石原莉奈在线亚洲二区| 国产成人久久精品麻豆二区 | 99国产精品久久久久久久| 伊人成人在线视频| 久久精品国产成人一区二区三区| 国产欧美日韩在线一区二区| 欧美午夜网站| 91亚洲精品在看在线观看高清| 国产图片一区| 成人羞羞视频播放网站| 在线视频日韩| 国产在线不卡一区二区三区 | 成人日韩在线观看| 欧美亚洲二区| 欧美日韩激情| 伊人久久大香伊蕉在人线观看热v| 捆绑调教日本一区二区三区| 日韩不卡免费高清视频| 日本不卡高清| 欧美成人精品| 中文字幕成在线观看| 在线观看亚洲精品福利片| 成人精品国产亚洲| 日韩激情网站| 欧美日韩一二| 国产在线日韩| 日韩精品不卡一区二区| 亚洲一区二区三区无吗| 精品欧美视频| 日本午夜精品久久久久| 久久精品国产99| 青青草精品视频| 国产精品久久久久久久久免费高清| 亚洲久久在线| 人人爽香蕉精品| 日韩不卡在线观看日韩不卡视频 | 日韩精品一区二区三区av| 国内在线观看一区二区三区| 久久久久97| 狠狠久久伊人| 精品中文字幕一区二区三区四区| 日韩中文字幕无砖| 日韩精品免费视频人成| 午夜精品亚洲| 日本久久一区| av资源新版天堂在线| 国产精品玖玖玖在线资源| 亚洲天堂黄色| 亚洲资源网站| 蜜桃av一区二区在线观看| 日本不卡的三区四区五区| 亚洲色图国产| 国产精品丝袜在线播放| 私拍精品福利视频在线一区| 欧美/亚洲一区| 久久中文在线| 麻豆精品在线观看| 国产精品第十页| 91看片一区| 国产欧美高清视频在线| 日韩欧美在线中字| 日韩福利视频网| 日韩亚洲一区在线| 国产亚洲欧美日韩在线观看一区二区| 日本亚洲最大的色成网站www| 精品国产第一福利网站| 亚洲一区二区三区无吗| 精品视频高潮| 亚洲一区亚洲| 日韩中文字幕一区二区高清99| 91麻豆精品激情在线观看最新| 麻豆国产精品| 午夜在线视频观看日韩17c| 少妇精品在线| 97精品在线| 亚洲欧洲美洲国产香蕉| 亚洲91视频| 国产精品chinese| 亚洲自啪免费| а√天堂8资源在线| 男人操女人的视频在线观看欧美| 免费一级欧美片在线观看网站| 91精品电影| 亚洲综合电影| 精品三级av| 欧美日韩1区| 欧美一级一区| 免费日韩视频| 久久夜夜操妹子| 麻豆成全视频免费观看在线看| 97精品资源在线观看| 在线一区二区三区视频| 亚洲国产一区二区三区在线播放| 中文字幕在线免费观看视频| 久久av偷拍| 麻豆精品久久久| 国产亚洲一区二区三区啪| 日韩在线观看中文字幕| 日韩制服丝袜av| 在线精品视频一区| 日本综合精品一区| 欧美一级网址| 国产亚洲精aa在线看| 欧美成人日韩| 国产精品亚洲欧美一级在线| 日韩精品一级中文字幕精品视频免费观看 | 成人久久一区| 日韩一区二区三区免费| 99精品综合| 久久99影视| 亚洲精品一二| 国产欧美亚洲精品a| 欧美成人一二区| av在线资源| 午夜欧美精品| 日本色综合中文字幕| 国产精品嫩模av在线| 精品国产亚洲一区二区三区在线| 国产66精品| 国产99久久| 亚洲欧美日韩在线观看a三区| 丝袜美腿亚洲一区| 日韩av不卡一区二区| 免费亚洲一区| 久久国产欧美| 日韩三级精品| 日韩久久精品网| 国产福利一区二区精品秒拍| 久久精品资源| 老司机精品视频网| 欧美日韩在线播放视频| 婷婷综合国产| 中文字幕色婷婷在线视频| 国产精品乱战久久久| 亚洲电影有码| 国产亚洲一区二区三区啪| 久久久久美女| 美女在线视频一区| 亚洲欧美日韩国产综合精品二区| 国产伦精品一区二区三区视频| 蜜桃成人精品| 国产精品久久久久久av公交车| 久久久久久久久丰满| 国产精品午夜一区二区三区| 美女尤物久久精品| 日韩激情精品| 日韩亚洲在线| 桃色av一区二区| 国产精品传媒麻豆hd| 精品一区在线| 精品久久在线| 欧美日韩中出| 久久夜色精品| 亚洲香蕉网站| 色婷婷色综合| 麻豆中文一区二区| 亚洲乱码视频| 久久亚洲风情| 在线日韩视频| 播放一区二区| 日韩中文欧美| 日韩精品91| 精精国产xxxx视频在线播放| 麻豆精品视频在线| 久久久久久网| 国产精品成人一区二区网站软件| 国产精品毛片在线看| 欧美日韩国产免费观看视频| 九色porny丨国产首页在线| 日韩88av| 久久久久.com| 自拍日韩欧美| 在线视频精品| 亚洲狼人精品一区二区三区| 中文在线日韩| 国产探花一区在线观看|