DB2 常見問題解答大匯總不得不看!
以下的文章主要向大家講述的是DB2 常見問題解答大匯總,以下的文章將會(huì)給你相應(yīng)的解決方案,如果你對(duì)DB2 常見問題解答,心存好奇的話,以下的文章將會(huì)揭開它的神秘面紗。在我的上一個(gè)專欄的示例 4 中(“ The Mystery of DB2 Sorts ”,見參考資料)。
我討論了如何在下面的 SQL 語(yǔ)句中使用索引:
- Select workdept, lastname, jobcode from employee_master
- Where workdept in ('A01', 'B22', 'B46') and lastname >= :hvlastname
- Order by lastname
文章中寫道:
使用第三個(gè)索引 [on jobcode, workdept, lastname] 時(shí),DB2 不能匹配任意一個(gè)謂詞,但它能夠通過篩選(而不是匹配)lastname 和 workdept 對(duì)索引數(shù)據(jù)應(yīng)用謂詞。對(duì)于符合條件的每個(gè)索引行,DB2 可以從該索引本身獲取這三個(gè)選擇的列,從而避免對(duì)表進(jìn)行讀操作。因?yàn)樗饕?**列為 lastname,所以數(shù)據(jù)應(yīng)該按 lastname 排序。這里不需要使用 SORT 。
接下來您問道,第三個(gè)索引的***列不是 lastname 。為什么不使用數(shù)據(jù)排序就能以 lastname 順序返回呢?這就是秘密所在之處。
至少有 200 位讀者向我反映了這個(gè)問題。對(duì)我而言,這既是好消息又是壞消息。好消息是很多讀者閱讀我的專欄,并且讀得非常仔細(xì)。壞消息是在收到***一封電子郵件時(shí),我感到非常難堪。
事情是這樣的。我開始時(shí)使用一個(gè)完全不同的虛構(gòu)的 “第三個(gè)索引” 和一個(gè)新點(diǎn)子,但后來我改變了主意,并對(duì)索引進(jìn)行更改。然后我重復(fù)輸入了一個(gè)已有段落,不小心忘記刪除***兩個(gè)句子(上面用斜體標(biāo)出的句子)。
那么,我想實(shí)現(xiàn)的新點(diǎn)子是什么呢?它就是:當(dāng) DB2 選擇的訪問路徑僅為索引時(shí),DB2 將忽略該索引的 CLUSTERRATIO 。對(duì)于純索引訪問,DB2 不會(huì)關(guān)心索引順序和表順序之間的關(guān)系。 DB2 永遠(yuǎn)不會(huì)以列表預(yù)取的方式使用索引。為什么?沒有必要執(zhí)行 RID SORT 使對(duì)表的讀操作更加有序,因?yàn)椴粫?huì)讀取這個(gè)表。
在這個(gè)例子中,DB2 將執(zhí)行完整的索引空間掃描,使用有序預(yù)取讀取每個(gè)單個(gè)的索引行,將這兩個(gè)謂詞應(yīng)用到每個(gè)行,并且對(duì)于符合條件的行,將從索引數(shù)據(jù)中獲取所有三個(gè)列。數(shù)據(jù)將不是按照 lastname 進(jìn)行排序。因此,DB2 必須執(zhí)行 SORT 來滿足 ORDER BY 子句。
現(xiàn)在,我終于算是彌補(bǔ)了自己的過失。以上的相關(guān)內(nèi)容就是對(duì)DB2 常見問題解答匯集的介紹,望你能有所收獲。
上述的相關(guān)內(nèi)容就是對(duì)DB2 常見問題解答匯集的描述,希望會(huì)給你帶來一些幫助在此方面。
【編輯推薦】