DB2索引設(shè)計(jì)準(zhǔn)則
此文章主要講述的是DB2索引設(shè)計(jì)準(zhǔn)則,以及其在實(shí)際操作值得我們大家留意的相關(guān)事項(xiàng)的描述,以下就是文章的主要內(nèi)容的詳細(xì)解析,望大家會對DB2 索引設(shè)計(jì)準(zhǔn)則有個更好的了解。
另一方面,對于不需要修改數(shù)據(jù)的查詢(SELECT 語句),大量索引有助于提高性能,因?yàn)閿?shù)據(jù)庫有更多的索引可供選擇,以便確定以最快速度訪問數(shù)據(jù)的***方法。
1. 組合索引:組合索引即多列索引,指一個索引含有多個列。一個組合索引相當(dāng)于多個單列索引,如索引(ColA, ColB, ColC)至少相當(dāng)于(ColA)、(ColA, ColB)、(ColA, ColB, ColC)三個索引。
2. 覆蓋的查詢可以提高性能。覆蓋的查詢是指查詢中所有指定的列都包含在同一個索引(組合索引)中。例如,如果在一個表的 a、b 和 c 列上創(chuàng)建了組合索引,則從該表中檢索 a 和 b 列的查詢被視為覆蓋的查詢。創(chuàng)建覆蓋一個查詢的索引可以提高性能,因?yàn)樵摬樵兊乃袛?shù)據(jù)都包含在索引自身當(dāng)中;檢索數(shù)據(jù)時只需引用表的索引頁,不必引用數(shù)據(jù)頁,因而減少了 I/O 總量。盡管給索引添加列以覆蓋查詢可以提高性能,但在索引中額外維護(hù)更多的列會產(chǎn)生更新和存儲成本。
3. 對小型表進(jìn)行索引可能不會產(chǎn)生優(yōu)化效果,因?yàn)閿?shù)據(jù)庫在遍歷索引以搜索數(shù)據(jù)時,花費(fèi)的時間可能會比簡單的表掃描還長。
4. 應(yīng)使用 SQL 事件探查器和索引優(yōu)化向?qū)椭治霾樵?,確定要創(chuàng)建的索引。為數(shù)據(jù)庫及其工作負(fù)荷選擇正確的索引是非常復(fù)雜的,需要在查詢速度和更新成本之間取得平衡。窄索引(搜索關(guān)鍵字中只有很少的列的索引)需要的磁盤空間和維護(hù)開銷都更少。而另一方面,寬索引可以覆蓋更多的查詢。確定正確的索引集沒有簡便的規(guī)則。經(jīng)驗(yàn)豐富的數(shù)據(jù)庫管理員常常能夠設(shè)計(jì)出很好的索引集,但是,即使對于不特別復(fù)雜的數(shù)據(jù)庫和工作負(fù)荷來說,這項(xiàng)任務(wù)也十分復(fù)雜、費(fèi)時和易于出錯。可以使用索引優(yōu)化向?qū)惯@項(xiàng)任務(wù)自動化。有關(guān)更多信息,請參見索引優(yōu)化向?qū)А?/p>
5. 可以在視圖上指定索引。
6. 可以在計(jì)算列上指定索引。
7. 避免在索引列上使用IS NULL和IS NOT NULL。避免在索引中使用任何可以為空的列,數(shù)據(jù)庫將無法使用該索引。對于單列索引,如果列包含空值,索引中將不存在此記錄;對于復(fù)合索引,如果每個列都為空,索引中同樣不存在此記錄. 如果至少有一個列不為空,則記錄存在于索引中。
8. 如果經(jīng)常檢索包含大量數(shù)據(jù)的表中的少于15%的行則需要創(chuàng)建索引。
9. 衡量索引效率的 95/5 規(guī)則:如果查詢的結(jié)果返回的行數(shù)少于表中所有行的5%,則索引是檢索數(shù)據(jù)的最快方法,如果查詢的結(jié)果超過5%,那么通常使用索引就不是最快的方式。
10.主關(guān)鍵字和唯一關(guān)鍵字所在的列自動具有索引,但外部關(guān)鍵字沒有自動索引。
索引的特征
在確定某一索引適合某一查詢之后,可以自定義最適合具體情況的索引類型。索引特征包括:
聚集還是非聚集
唯一還是不唯一
單列還是多列
索引中的列順序?yàn)樯蜻€是降序(索引缺省為升序,但目前多數(shù)大型數(shù)據(jù)庫已經(jīng)能夠支持反向索引)
覆蓋還是非覆蓋
還可以自定義索引的初始存儲特征,通過設(shè)置填充因子優(yōu)化其維護(hù),并使用文件和文件組自定義其位置以優(yōu)化性能。
位映射索引(bitmap)
以上的相關(guān)內(nèi)容就是對DB2索引設(shè)計(jì)準(zhǔn)則的介紹,望你能有所收獲。

以上的相關(guān)內(nèi)容就是對DB2索引設(shè)計(jì)準(zhǔn)則的介紹,望你能有所收獲。
【編輯推薦】















 
 
 
 
 
 
 