隨筆-25  評論-6  文章-0  trackbacks-0

          1. 一個表如果建有大量索引會影響 INSERT、UPDATE 和 DELETE 語句的性能,因為在表中的數據更改時,所有索引都須進行適當的調整。另一方面,對于不需要修改數據的查詢(SELECT 語句),大量索引有助于提高性能,因為數據庫有更多的索引可供選擇,以便確定以最快速度訪問數據的最佳方法。

          2. 組合索引:組合索引即多列索引,指一個索引含有多個列。一個組合索引相當于多個單列索引,如索引(ColA, ColB, ColC)至少相當于(ColA)、(ColA, ColB)、(ColA, ColB, ColC)三個索引。

          2. 覆蓋的查詢可以提高性能。覆蓋的查詢是指查詢中所有指定的列都包含在同一個索引(組合索引)中。例如,如果在一個表的 a、b 和 c 列上創建了組合索引,則從該表中檢索 a 和 b 列的查詢被視為覆蓋的查詢。創建覆蓋一個查詢的索引可以提高性能,因為該查詢的所有數據都包含在索引自身當中;檢索數據時只需引用表的索引頁,不必引用數據頁,因而減少了 I/O 總量。盡管給索引添加列以覆蓋查詢可以提高性能,但在索引中額外維護更多的列會產生更新和存儲成本。

          3. 對小型表進行索引可能不會產生優化效果,因為數據庫在遍歷索引以搜索數據時,花費的時間可能會比簡單的表掃描還長。

          4. 應使用 SQL 事件探查器和索引優化向導幫助分析查詢,確定要創建的索引。為數據庫及其工作負荷選擇正確的索引是非常復雜的,需要在查詢速度和更新成本之間取得平衡。窄索引(搜索關鍵字中只有很少的列的索引)需要的磁盤空間和維護開銷都更少。而另一方面,寬索引可以覆蓋更多的查詢。確定正確的索引集沒有簡便的規則。經驗豐富的數據庫管理員常常能夠設計出很好的索引集,但是,即使對于不特別復雜的數據庫和工作負荷來說,這項任務也十分復雜、費時和易于出錯。可以使用索引優化向導使這項任務自動化。有關更多信息,請參見索引優化向導。

          5. 可以在視圖上指定索引。

          6. 可以在計算列上指定索引。

          7. 避免在索引列上使用IS NULL和IS NOT NULL。避免在索引中使用任何可以為空的列,數據庫將無法使用該索引。對于單列索引,如果列包含空值,索引中將不存在此記錄;對于復合索引,如果每個列都為空,索引中同樣不存在此記錄. 如果至少有一個列不為空,則記錄存在于索引中。

          8. 如果經常檢索包含大量數據的表中的少于15%的行則需要創建索引。

          9. 衡量索引效率的 95/5 規則:如果查詢的結果返回的行數少于表中所有行的5%,則索引是檢索數據的最快方法,如果查詢的結果超過5%,那么通常使用索引就不是最快的方式。

          10.主關鍵字和唯一關鍵字所在的列自動具有索引,但外部關鍵字沒有自動索引。


          二、索引的特征
          ??? 在確定某一索引適合某一查詢之后,可以自定義最適合具體情況的索引類型。索引特征包括:

          ●聚集還是非聚集
          ●唯一還是不唯一
          ●單列還是多列
          ●索引中的列順序為升序還是降序(索引缺省為升序,但目前多數大型數據庫已經能夠支持反向索引)
          ●覆蓋還是非覆蓋
          ●還可以自定義索引的初始存儲特征,通過設置填充因子優化其維護,并使用文件和文件組自定義其位置以優化性能。
          ●位映射索引(bitmap)

          posted on 2006-06-21 16:50 MyJavaWorld 閱讀(2287) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 灵武市| 磐石市| 元阳县| 光泽县| 册亨县| 武平县| 芒康县| 青田县| 清苑县| 泗水县| 册亨县| 鄂温| 盐山县| 霞浦县| 阳谷县| 冕宁县| 威远县| 云龙县| 丹凤县| 岳池县| 汤阴县| 雷州市| 偃师市| 商水县| 天镇县| 辉南县| 新源县| 利川市| 鄂托克前旗| 花垣县| 金寨县| 酒泉市| 海阳市| 屏边| 莆田市| 浪卡子县| 长春市| 泗阳县| 长葛市| 凯里市| 大埔区|