<address id="thnfp"></address>

    <address id="thnfp"><th id="thnfp"><progress id="thnfp"></progress></th></address>
    <listing id="thnfp"><nobr id="thnfp"><meter id="thnfp"></meter></nobr></listing>
    dvbbs
    收藏本頁
    聯系我們
    論壇幫助
    dvbbs

    >> 電腦專業知識交流
    搜一搜相關精彩主題 
    安易免費財務軟件交流論壇專業知識交流電腦知識交流 → 教你一招:MS—SQL數據庫索引的應用

    您是本帖的第 589 個閱讀者
    樹形 打印
    標題:
    教你一招:MS—SQL數據庫索引的應用
    hdkskly
    帥哥喲,離線,有人找我嗎?
    等級:論壇游俠
    文章:204
    積分:1145
    注冊:2008年9月26日
    樓主
      點擊這里發送電子郵件給hdkskly

    發貼心情
    教你一招:MS—SQL數據庫索引的應用

    一、索引的概念

    索引就是加快檢索表中數據的方法。數據庫的索引類似于書籍的索引。在書籍中,索引允許用戶不必翻閱完整個書就能迅速地找到所需要的信息。在數據庫中,索引也允許數據庫程序迅速地找到表中的數據,而不必掃描整個數據庫。

    二、索引的特點

    1.索引可以加快數據庫的檢索速度

    2.索引降低了數據庫插入、修改、刪除等維護任務的速度

    3.索引創建在表上,不能創建在視圖上

    4.索引既可以直接創建,也可以間接創建

    5.可以在優化隱藏中,使用索引

    6.使用查詢處理器執行SQL語句,在一個表上,一次只能使用一個索引

    7.其他

    三、索引的優點

    1.創建唯一性索引,保證數據庫表中每一行數據的唯一性

    2.大大加快數據的檢索速度,這也是創建索引的最主要的原因

    3.加速表和表之間的連接,特別是在實現數據的參考完整性方面特別有意義。

    4.在使用分組和排序子句進行數據檢索時,同樣可以顯著減少查詢中分組和排序的時間。

    5.通過使用索引,可以在查詢的過程中使用優化隱藏器,提高系統的性能。

    四、索引的缺點

    1.創建索引和維護索引要耗費時間,這種時間隨著數據量的增加而增加

    2.索引需要占物理空間,除了數據表占數據空間之外,每一個索引還要占一定的物理空間,如果要建立聚簇索引,那么需要的空間就會更大

    3.當對表中的數據進行增加、刪除和修改的時候,索引也要動態的維護,降低了數據的維護速度

    五、索引分類

    1.直接創建索引和間接創建索引

    直接創建索引: CREATE INDEX mycolumn_index ON mytable (myclumn)

    間接創建索引:定義主鍵約束或者唯一性鍵約束,可以間接創建索引

    2.普通索引和唯一性索引

    普通索引:

    CREATE INDEX mycolumn_index ON mytable (myclumn)

    唯一性索引:保證在索引列中的全部數據是唯一的,對聚簇索引和非聚簇索引都可以使用

    CREATE UNIQUE COUSTERED INDEX myclumn_cindex ON mytable(mycolumn)

    3.單個索引和復合索引

    單個索引:即非復合索引

    復合索引:又叫組合索引,在索引建立語句中同時包含多個字段名,最多16個字段

    CREATE INDEX name_index ON username(firstname,lastname)

    4.聚簇索引和非聚簇索引(聚集索引,群集索引)

    聚簇索引:物理索引,與基表的物理順序相同,數據值的順序總是按照順序排列

    CREATE CLUSTERED INDEX mycolumn_cindex ON mytable(mycolumn) WITH

    ALLOW_DUP_ROW(允許有重復記錄的聚簇索引)

    非聚簇索引:

    CREATE UNCLUSTERED INDEX mycolumn_cindex ON mytable(mycolumn)

    六、索引的使用

    1.當字段數據更新頻率較低,查詢使用頻率較高并且存在大量重復值是建議使用聚簇索引

    2.經常同時存取多列,且每列都含有重復值可考慮建立組合索引

    3.復合索引的前導列一定好控制好,否則無法起到索引的效果。如果查詢時前導列不在查詢條件中則該復合索引不會被使用。前導列一定是使用最頻繁的列

    4.多表操作在被實際執行前,查詢優化器會根據連接條件,列出幾組可能的連接方案并從中找出系統開銷最小的最佳方案。連接條件要充份考慮帶有索引的表、行數多的表;內外表的選擇可由公式:外層表中的匹配行數*內層表中每一次查找的次數確定,乘積最小為最佳方案

    5.where子句中對列的任何操作結果都是在sql運行時逐列計算得到的,因此它不得不進行表搜索,而沒有使用該列上面的索引;如果這些結果在查詢編譯時就能得到,那么就可以被sql優化器優化,使用索引,避免表搜索。

    例:

    select * from record where substring(card_no,1,4)=’5378’
                && select * from record where card_no like ’5378%’

    任何對列的操作都將導致表掃描,它包括數據庫函數、計算表達式等等,查詢時要盡可能將操作移至等號右邊

    6.where條件中的’in’在邏輯上相當于’or’,所以語法分析器會將in ('0','1')轉化為column='0' or column='1'來執行。我們期望它會根據每個or子句分別查找,再將結果相加,這樣可以利用column上的索引;但實際上它卻采用了"or策略",即先取出滿足每個or子句的行,存入臨時數據庫的工作表中,再建立唯一索引以去掉重復行,最后從這個臨時表中計算結果。因此,實際過程沒有利用column上索引,并且完成時間還要受tempdb數據庫性能的影響。in、or子句常會使用工作表,使索引失效;如果不產生大量重復值,可以考慮把子句拆開;拆開的子句中應該包含索引

    7.要善于使用存儲過程,它使sql變得更加靈活和高效

    ip地址已設置保密
    2008/9/27 16:10:41

     1   1   1/1頁      1    
    網上貿易 創造奇跡! 阿里巴巴 Alibaba
    北京安易天地軟件有限公司北方論壇
    聯系電話:010-51268244 13611231185 QQ:511102924
    Powered By Dvbbs Version 7.1.0 Sp1
    頁面執行時間 0.10156 秒, 5 次數據查詢
    Channel