oracle資料訪問途徑之全掃瞄
oracle總共只有兩種基本的資料訪問途徑:全掃瞄或者索引掃瞄 。
統計資訊在優化器準備確定最優方法的過程中扮演了關鍵的角色。
www.2cto.com
當對乙個物件進行全掃瞄時,與該物件相關的所有資料塊都必須取出並進行處理,以確定塊中所包含的資料行是否是你的查詢所需要的。請記住oracle必須將整個資料塊讀取到記憶體中以取得這個塊中所儲存的資料行的資料。因此,當發生全掃瞄時,實際上優化器需要考慮兩件事:必須讀取多少資料塊以及每個資料塊中有多少資料將被捨棄。
基於資料儲存方式的不同,優化器的執行計畫選擇也可能會不同。
請記住,全掃瞄是否為高效的選擇,取決於需要訪問的資料塊個數以及最終的結果集行數。資料的儲存方式在決策過程中扮演了重要的角色。此外,全掃瞄是否為高效選擇的另乙個關鍵因素是捨棄。所訪問資料塊數目以及捨棄的數量越大,全表掃瞄的成本也就越高。
隨著時間的推移,新的行被插入到表中使得表變得更大,捨棄這麼多資料行的成本也不斷增加,到一定程度時優化器將會切換到使用索引掃瞄運算。優化器決定進行切換的點並不一定是你實現最佳效能的點。你可以通過使用提示來強制優化器使用索引,以測試在哪個點上使用索引更有意義。
全掃瞄運算將會進行多塊讀取。也就是說乙個單獨的io呼叫將會請求多個塊而不僅僅是乙個。所請求的資料塊數目是可變的,實際上可以是從乙個到db_file_multiblock_read_count引數所指定的數目範圍之間的任意個。例如,如果這個引數設定為16,而表中有160個塊,可以只通過10次呼叫就可以獲取所有的資料塊。 www.2cto.com
關於全表掃瞄需要注意的最後一點,當對掃瞄進行多塊讀取呼叫時,oracle將最多讀取到位於表中高水位線的資料塊。高水位線標出了最後一塊有資料寫入的資料塊。即使幾乎所有資料行都被刪除了並且一些塊實際上已經完全變成空的了,高水位線還是保持不變。當進行全掃瞄運算的時候,到高水位線為止的所有資料塊都將被讀取並掃瞄,即使它們是空的。這就意味著許多實際上不需要讀取的空資料塊也被讀取了。
Oracle儲存過程訪問,Oracle資料分頁
訪問oracle的儲存過程並獲取返回結果 using oracleconnection cn new oracleconnection connectionstringlocaltransaction parameters 0 value value 輸入引數的值 parameters 0 dire...
mysql 優化 資料型別不匹配導致的全表掃瞄
一條sql執行時間特別長,很多時候頁面都直接504 timeout,sql內容大致如下,其中a表的資料有2000w 資料,b表有600w 資料 select a.from awhere a.user id 123and a.id notin select b.pay record id as pay...
php 之 資料訪問
資料訪問 方式一 已過時,只做了解 1.造乙個連線 建立通道 db mysql connect localhost root 123 括號內是 伺服器位址 使用者名稱 密碼 2.選擇操作哪個資料庫 mysql select db mydb db 3.寫sql語句 sql select from in...