国产一区二区精品-国产一区二区精品久-国产一区二区精品久久-国产一区二区精品久久91-免费毛片播放-免费毛片基地

千鋒教育-做有情懷、有良心、有品質的職業教育機構

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  技術干貨  > 什么是全表掃描-有哪些使用場景

什么是全表掃描-有哪些使用場景

來源:千鋒教育
發布人:xqq
時間: 2023-12-04 19:47:26 1701690446

什么是全表掃描?全表掃描是一種“萬能”的查詢方式。任何對數據的訪問需求,都可以通過全表掃描的方式解決。

在邏輯上,這種方式會讀取表中的所有行,然后檢查每一行是否滿足語句的限制條件。物理上,這種方式會批量讀取高水位線下的每個數據塊。這里注意兩點,一是批量讀取,二是高水位線。批量讀取的目的是為了減少I/O次數,提高系統的吞吐能力。

一個多塊讀操作可以使一次I/O能讀取多塊數據塊(db_block_multiblock_read_count參數設定),而不是只讀取一個數據塊,這極大地減少了I/O總次數,提高了系統的吞吐量。所以利用多塊讀的方法可以十分高效地實現全表掃描,而且只有在全表掃描的情況下才能使用多塊讀操作。

高水位線,在前面已經提到過了,它標識著數據存放的最高點。常見的DELETE操作不會影響高水位線,只有使用TRUNCATE才會將高水位置為零。在10g以后的版本,可以通過shrink命令人工收縮高水位線。

一般情況下,全表掃描得到的數據庫將放入緩沖區LRU鏈表的LRU端,也就是盡快被淘汰出的部分。因為Oracle認為全表掃描得到的數據應該是臨時訪問的,不應長期占用緩沖區。

在11g之后的版本,Oracle提供了一種新的方式來處理全表掃描,稱為直接路徑讀取。這種方式的獨特之處在于,數據塊將不保存在緩沖區中,這將大大減少栓鎖的使用,避免對緩沖區的沖擊。當然這種方式也不是完全沒有問題,因此很多系統從10g升級到11g的時候,要特別注意這個問題。

在優化器選擇掃描方式時實際是在尋求一個平衡,即尋找表掃描和索引掃描的損益分界點。對于數據量比較少的表而言,全表掃描與索引掃描的損益分界點為15%。對于數據量比較多的表而言,全表掃描與索引掃描的損益分界點可能會小于5%。

而對于存儲著海量數據的表而言,全表掃描與索引掃描的損益分界點可能是1%。這里的1%是指即使通過索引掃描來從表中讀取1%的數據,也沒有直接通過全表掃描讀取數據有效。當然上面這些數字都經驗值,實際都以成本為最終考察因素。

此外,隨著磁盤技術的不斷發展,特別是閃存技術的不斷成熟,隨機讀取的開銷減少了很多,換句話說索引訪問的成本大大下降了,優化器會更加傾向于使用索引掃描方式。

全表掃描有哪些使用場景??下面來看看常見的使用全表掃描的場景:

大范圍數據讀取的情況:這里的大范圍是個相對的概念。一般來說,如果訪問表中的大部分數據,用表掃描效率較高;如果訪問表中的小部分數據,則使用索引訪問的效率較高。

這里就涉及一個“損益點”的概念,當小于損益點時,索引訪問效率高;當高于損益點是,表訪問效率低。這不是一個具體比例,常見的經驗在1%~10%之間。具體還是取決于當時的成本評估。

從小數據表中讀取數據的情況:如果訪問的數據規模較小,則優化器傾向于通過全表掃描的方式訪問整個表。因為全表掃描使用了多塊讀的機制,往往效率是很高的。當然,如何界定小表是個問題,后面會專門介紹這個問題。

按照并行處理方式讀取數據的情況:在并行處理的情況下,全表掃描的執行速度會在更大程度上得到提高。

使用FULL提示的情況:這個提示告訴優化器,使用全表掃描訪問表。

?

tags: IT培訓
聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。
10年以上業內強師集結,手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內將與您1V1溝通
免費領取
今日已有369人領取成功
劉同學 138****2860 剛剛成功領取
王同學 131****2015 剛剛成功領取
張同學 133****4652 剛剛成功領取
李同學 135****8607 剛剛成功領取
楊同學 132****5667 剛剛成功領取
岳同學 134****6652 剛剛成功領取
梁同學 157****2950 剛剛成功領取
劉同學 189****1015 剛剛成功領取
張同學 155****4678 剛剛成功領取
鄒同學 139****2907 剛剛成功領取
董同學 138****2867 剛剛成功領取
周同學 136****3602 剛剛成功領取
相關推薦HOT