java技術研究

          導航

          <2013年4月>
          31123456
          78910111213
          14151617181920
          21222324252627
          2829301234
          567891011

          隨筆分類

          隨筆檔案

          統計

          留言簿(3)

          閱讀排行榜

          評論排行榜

          索引的創建原則(轉)

          基于合理的數據庫設計,經過深思熟慮后為表建立索引,是獲得高性能數據庫系統的基礎。而未經合理分析便添加索引,則會降低系統的總體性能。索引雖然說提高了數據的訪問速度,但同時也增加了插入、更新和刪除操作的處理時間。

          是否要為表增加索引、索引建立在那些字段上,是創建索引前必須要考慮的問題。解決此問題的一個比較好的方法,就是分析應用程序的業務處理、數據使用,為經常被用作查詢條件、或者被要求排序的字段建立索引。基于優化器對SQL語句的優化處理,我們在創建索引時可以遵循下面的一般性原則:

          1)為經常出現在關鍵字order bygroup bydistinct后面的字段,建立索引。

          在這些字段上建立索引,可以有效地避免排序操作。如果建立的是復合索引,索引的字段順序要和這些關鍵字后面的字段順序一致,否則索引不會被使用。

          2)在union等集合操作的結果集字段上,建立索引。其建立索引的目的同上。

          3)為經常用作查詢選擇的字段,建立索引。

          4)在經常用作表連接的屬性上,建立索引。

          5)考慮使用索引覆蓋。對數據很少被更新的表,如果用戶經常只查詢其中的幾個字段,可以考慮在這幾個字段上建立索引,從而將表的掃描改變為索引的掃描。

          除了以上原則,在創建索引時,我們還應當注意以下的限制:

          1)限制表上的索引數目。

          對一個存在大量更新操作的表,所建索引的數目一般不要超過3個,最多不要超過5個。索引雖說提高了訪問速度,但太多索引會影響數據的更新操作。

          2)不要在有大量相同取值的字段上,建立索引。

          在這樣的字段(例如:性別)上建立索引,字段作為選擇條件時將返回大量滿足條件的記錄,優化器不會使用該索引作為訪問路徑。

          3)避免在取值朝一個方向增長的字段(例如:日期類型的字段)上,建立索引;對復合索引,避免將這種類型的字段放置在最前面。

          由于字段的取值總是朝一個方向增長,新記錄總是存放在索引的最后一個葉頁中,從而不斷地引起該葉頁的訪問競爭、新葉頁的分配、中間分支頁的拆分。此外,如果所建索引是聚集索引,表中數據按照索引的排列順序存放,所有的插入操作都集中在最后一個數據頁上進行,從而引起插入“熱點”。

          4)對復合索引,按照字段在查詢條件中出現的頻度建立索引。

          在復合索引中,記錄首先按照第一個字段排序。對于在第一個字段上取值相同的記錄,系統再按照第二個字段的取值排序,以此類推。因此只有復合索引的第一個字段出現在查詢條件中,該索引才可能被使用。

          因此將應用頻度高的字段,放置在復合索引的前面,會使系統最大可能地使用此索引,發揮索引的作用。

          5)刪除不再使用,或者很少被使用的索引。

          表中的數據被大量更新,或者數據的使用方式被改變后,原有的一些索引可能不再被需要。數據庫管理員應當定期找出這些索引,將它們刪除,從而減少索引對更新操作的影響。

          轉自
          http://www.cnblogs.com/xuhan/archive/2011/07/25/2116156.html

          posted on 2013-04-19 09:31 小秦 閱讀(247) 評論(0)  編輯  收藏


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


          網站導航:
           
          主站蜘蛛池模板: 绥芬河市| 漯河市| 大宁县| 富宁县| 赤壁市| 西充县| 滦南县| 阿克陶县| 永顺县| 长治市| 黔江区| 太原市| 双鸭山市| 镇坪县| 天全县| 温宿县| 甘泉县| 札达县| 八宿县| 揭阳市| 东明县| 太仆寺旗| 昌黎县| 浦北县| 隆回县| 长春市| 景泰县| 平远县| 阿鲁科尔沁旗| 温州市| 台北市| 慈溪市| 澄江县| 白城市| 郓城县| 筠连县| 宾阳县| 金塔县| 和政县| 堆龙德庆县| 汾阳市|