成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

高級掃描提高數據庫查詢性能

運維 數據庫運維
數據庫查詢時數據庫重要更能之一,數據庫查詢能很大程度的提高查詢的速度,自從人類進入到數據庫時代,很多查詢工作都得到了簡化,如今,高速掃描可以提高數據庫查詢性能。

高速掃描的出現對數據庫查詢來說是意義重大,高速掃描實現了數據庫查詢的高速化發展,也使數據庫查詢性能優化了,下面就為大家介紹高級掃描。

一、高級掃描使用舉例

  通常情況下在數據查詢的時候,數據庫會利用索引或者通過全表掃描來查找數據。但是如果需要的數據在數據庫中存儲不連續或者需要查找的記錄比較多時,此時索引的效果就會大打折扣。在這種情況下,數據庫查詢優化器可能會采用全表掃描來代替索引。但是眾所周知,全表掃描的效率是比較低下的。為此在SQL Server數據庫的企業版中,提出了一個高級掃描的處理方式。簡單的說,高級掃描可以讓多項查詢任務共享完全表掃描。筆者先給大家舉一個例子,然后再跟大家談談隱藏在其背后的秘密。

  如在上圖中,一個表中的記錄比較多有40000頁。用戶甲需要查詢這個表中的記錄,假設其采用了全表掃描。當數據庫查詢到20000頁的時候,用戶乙也需要這個表中的數據,那么又觸發了一個全表掃描。此時如果沒有采用高級掃描技術的話,則用戶乙的SQL語句必須要等到用戶甲的執行完畢后才會執行。而如果采用了高級掃描技術的話,則數據庫在從20000頁開始的全表掃描中,會把掃描的結果分成兩個副本,分別給用戶甲與乙。然后當第30000頁的時候,用戶丙也參與進來了。同理數據庫引擎會把從30000頁開始的掃描結果分為三個副本,分別給三個用戶。當整個表掃描完成之后,數據庫引擎就會把結果返回給用戶甲。然后再從頭開始掃描,當掃描到20000頁的時候,就會把上次掃描的20000頁到400000頁的結果合并起來然后返回給用戶乙。掃描到300000頁的時候就會把與上次掃描到的結果合并起來返回給用戶丙。

  可見如果在不同高級掃描功能的話,則不同用戶在不同時刻的查詢請求,可能需要對某個表進行全表掃描三次。而在上面這個案例中,則知需要對這個表掃描2次都不到。為此當多個對同一個表進行全表掃描時,高級掃描工具可以明顯提高數據庫的運行性能。

二、高級掃描實現的秘密

  可見高級掃描其主要就是通過共享全表掃描技術來實現的。也就是說,當SQL語句的執行計劃需要掃描表中的數據頁(即全表掃描),并且數據庫引擎檢測到其他查詢執行計劃正在掃描這個表中的時候(如上例中用戶乙、丙參與進來),則數據庫引擎就會在第二個掃描的當前位置將第二個掃描插入到第一個掃描中(此時數據庫引擎會會把掃描的結果產生一個副本)。數據庫引起會一次讀取一頁,并加每一頁的行傳遞給多個執行計劃,一直到當前掃描結束。

  此時,第一個掃描(用戶甲)已經完全結束,數據庫引擎就會把掃描的結果傳遞給用戶甲的進程。但是此時數據庫乙還不能夠把結果返回給用戶乙,因為在用戶甲開始查詢到用戶乙遞交SQL語句中間,可能會有用戶對前面幾頁的數據進行修改。為此數據庫引擎需要對先前的頁進行重新掃描,以防止數據的誤讀。為此第二個查詢計劃必須發起第二個全表掃描,檢索第二個執行計劃加入第一次掃描正在進行的掃描之前讀取的數據頁。即第二個執行計劃的掃描將繞回到第一個數據頁,并從這里開始掃描,直到其加入到第一個掃描時的位置。然后數據庫引擎會把掃描到的結果返回給第二個查詢計劃,依次類推。在實際工作中,可以按這種方式組合任意數量的掃描。其實這種掃描很想走馬燈,為此我們又把高級掃描戲稱為全表掃描。可見在這種情況下,如果多個用戶在一次全表掃描的過程中查詢同一個表,則可以減少全表掃描的次數。如果在沒有高級掃描的情況下,像上面的用戶甲、乙、丙都必須要爭用緩沖區空間并因此導致硬盤或者內存的爭用等等。然后數據庫引擎會分別為每一個用戶讀取依次相同的頁,而不是每次讀取的結果有多個用戶共享。顯然跟高級掃描比起來,這種處理方式其效率會低很多。

三、高級掃描的弊端與解決方式

  雖然高級掃描會提高數據庫的查詢性能,但是這種處理機制也會有一個弊端,即會導致查詢結果記錄順序的混亂。如上面這個例子中,如果三個用戶采用的都是同一個查詢語句的話,則其最后返回的結果雖然記錄的內容是相同的,但是顯示的記錄順序是不同的(假設沒有采用排序語句)。這可能會給用戶一種誤解,以為各自查到的是不同的內容。為什么會產生這種情況呢?為了說們這個問題的原因,筆者就對表中的內容進行簡化。假設某一張表中有三條記錄,序號分別為1、2、3。

  現在用戶甲需要查詢這個表中的內容,進行了一次全表掃描。當第一條記錄查詢完畢之后,用戶乙也需要查詢這個表。從這次開始的后續查詢中,數據庫引擎會把結果同時發送給用戶甲與乙兩個查詢計劃。也就是說,用戶乙此時掃描的第一個結果是序號為2的記錄。然后用戶丙又插了進來,那么這個時候數據庫引擎返回給用戶丙執行計劃的第一條記錄就是序號為3的記錄了。第一次掃描完畢后,再重新進行第二次掃描,然后把序號為1的記錄返回給用戶乙。最后用戶甲顯示的記錄順序為1、2、3;而用戶乙顯示的記錄順序為2、3、1;用戶丙顯示的記錄順序為3、2、1。當記錄比較少的時候,用戶還可以一目了然的指導查詢結果是相同的,只是順序顛倒了而已。但是如果記錄比較多的情況下,則用戶丙很可能會誤認為其找到的記錄跟甲是不同的。因為順序混亂,所以不能夠清楚的判斷所查找的記錄是否相同。

  為此在實際工作中,需要克服這個弊端。最簡單的方式就是采用order by語句對查詢的結果進行掃描。但是眾所周知,對記錄進行排序會增加數據庫額外的開銷,會抵消高級掃描所帶來的性能提升的效果。故通常情況下對于可能需要用到高級掃描的SQL語句,不會采用order by等排序語句,除非用戶非常明確的有這方面的需要,才會把這個語句加入進去。另外需要注意的是,有些匯總語句,如Group By等也會對記錄進行自動排序,這也會增加額外的負擔。但是一般來說,即使是需要對查詢結果進行排序,那么排序過程中的開銷相比多次全表掃描的開銷來說,還是要小的多。也就是說,在高級掃描后進行排序來解決這個記錄顯示順序不一致的情況,仍然是可行的。

四、影響高級掃描效果的因素

  如上的分析中,在一個查詢計劃的執行過程中,如果越多的查詢計劃插入到其中來,那么這個高級掃描技術的效果就越佳。相反,如果一個查詢計劃完成后,仍然沒有用戶加入到這個查詢計劃中,那么這個高級掃描的功能就根本沒有發揮出來。此時查詢就只是一個簡單的全表掃描。為此對這個高級掃描的效果,直接跟用戶的參與度相關。如果在一個比較短的時間間隔內,比較多的用戶發起了對一個表的查詢,那么高級掃描的效果才能夠體現出來。為此數據庫管理員需要知道,并不是在任何時候數據庫系統上實現高級掃描就可以實現比較高的數據庫性能。而是需要跟數據庫的實際應用以及員工的作業有關。

  為此企業如果比較多的用戶需要對某張表進行查詢的時候,那么就需要考慮是否能夠采用高級掃描。如在一個ERP系統中,其產品信息有幾百萬條。有多個用戶需要查詢這個產品信息表中的內容,需要把查票信息導出來以作他用。此時各個部門的用戶如果在前后時間間隔不是很大的情況下,對這個表發起查詢作業。那么此時就可以利用高級掃描工具來共享掃描對結果,減少全表掃描此時,提高掃描結果。

  除了用戶人數之外,還需要注意的是記錄的內容多少也跟這個高級掃描的效果有關。如高紀錄比較到,則這個全表掃描的時間就比較長。而執行計劃長了,則在這個執行計劃的執行過程中參與的用戶可能會越多。那無疑也可以提高高級掃描的效果。此時可以起到一個累加的效果,用戶總的等待時間會隨著參與到這個查詢計劃中來的用戶數量而減少。人數越多,用戶總的等待時間比全表掃描需要花費的時間少的會更多。

以上就是我要為大家介紹的全部內容,希望能夠幫到大家,以后有什么好的東西會繼續跟大家分享。

【編輯推薦】

  1. 改善SQL Server數據庫查詢速度慢的技巧
  2. MySQL數據庫查詢優化的3方案詳解
  3. 數據庫查詢的分頁優化技巧
  4. 數據庫查詢初始化參數的方法
責任編輯:迎迎 來源: IT專家網
相關推薦

2010-05-10 15:50:39

Oracle數據庫性能

2022-12-05 08:00:00

數據庫向量化數據庫性能

2010-04-27 16:41:07

Oracle性能

2010-05-31 14:50:49

MySQL數據庫性能

2021-01-31 17:50:41

數據庫查詢程序員

2011-04-18 09:03:36

數據庫查詢

2013-03-13 10:56:42

高云數據庫數據庫算法

2022-06-28 15:00:28

數據庫性能操作系統

2011-04-02 09:23:19

MySQL數據庫查詢效率

2011-04-02 09:33:13

MySQL數據庫查詢效率

2010-04-07 17:45:22

Oracle位圖索引

2011-04-02 09:33:08

MySQL數據庫查詢效率

2011-03-17 17:50:39

SQL Server數

2017-09-26 10:51:55

提高數據庫性能

2009-05-11 14:19:55

Oracle性能優化數據庫

2011-04-13 09:19:05

Oracle數據庫系統性能

2023-07-12 08:55:16

PawSQL數據庫

2015-04-22 14:41:04

云遷移Redis緩存數據模型調整

2011-08-03 18:01:54

MySQL數據庫提高查詢速度

2010-08-03 09:59:30

DB2數據庫
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本福利在线观看 | 久久夜视频| 欧美日韩视频在线 | 日韩一区二区三区av | 国产精品7777777 | 99精品网 | 国产一区二区精品在线观看 | 日本三级网址 | 91素人 | 午夜视频免费在线观看 | 中文字幕97 | 欧美成人精品激情在线观看 | 亚洲国产精久久久久久久 | 久久精品欧美一区二区三区麻豆 | 欧美激情久久久 | 午夜在线视频 | 亚洲欧美激情精品一区二区 | 人人做人人澡人人爽欧美 | 美国一级黄色片 | 日韩精品一区二区三区四区 | 日韩欧美在线一区 | 久久久久91| 中文字幕在线二区 | 日韩免费av | .国产精品成人自产拍在线观看6 | 国产精品免费观看 | 亚洲视频一区二区三区四区 | 一区二区三区高清 | 久久99蜜桃综合影院免费观看 | 日韩一二区在线观看 | 欧美性网 | 在线亚洲免费视频 | 玖操| 国产视频1区 | 中文字幕在线一区 | 99久久精品国产毛片 | 成人网址在线观看 | 日韩在线一区视频 | 日韩三级在线观看 | 久久久久国产 | 亚洲欧美中文日韩在线v日本 |