国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

數(shù)據(jù)庫索引應用(ms-sql)

2024-07-21 02:31:39
字體:
供稿:網(wǎng)友

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

二、索引的特點
    1.索引可以加快數(shù)據(jù)庫的檢索速度
    2.索引降低了數(shù)據(jù)庫插入、修改、刪除等維護任務的速度
    3.索引創(chuàng)建在表上,不能創(chuàng)建在視圖上
    4.索引既可以直接創(chuàng)建,也可以間接創(chuàng)建
    5.可以在優(yōu)化隱藏中,使用索引
    6.使用查詢處理器執(zhí)行SQL語句,在一個表上,一次只能使用一個索引
    7.其他

三、索引的優(yōu)點
    1.創(chuàng)建唯一性索引,保證數(shù)據(jù)庫表中每一行數(shù)據(jù)的唯一性
    2.大大加快數(shù)據(jù)的檢索速度,這也是創(chuàng)建索引的最主要的原因
    3.加速表和表之間的連接,特別是在實現(xiàn)數(shù)據(jù)的參考完整性方面特別有意義。
    4.在使用分組和排序子句進行數(shù)據(jù)檢索時,同樣可以顯著減少查詢中分組和排序的時間。
    5.通過使用索引,可以在查詢的過程中使用優(yōu)化隱藏器,提高系統(tǒng)的性能。

四、索引的缺點
    1.創(chuàng)建索引和維護索引要耗費時間,這種時間隨著數(shù)據(jù)量的增加而增加
    2.索引需要占物理空間,除了數(shù)據(jù)表占數(shù)據(jù)空間之外,每一個索引還要占一定的物理空間,如果要建立聚簇索引,那么需要的空間就會更大
    3.當對表中的數(shù)據(jù)進行增加、刪除和修改的時候,索引也要動態(tài)的維護,降低了數(shù)據(jù)的維護速度

五、索引分類
    1.直接創(chuàng)建索引和間接創(chuàng)建索引
    直接創(chuàng)建索引: CREATE INDEX mycolumn_index ON mytable (myclumn)
    間接創(chuàng)建索引:定義主鍵約束或者唯一性鍵約束,可以間接創(chuàng)建索引
    2.普通索引和唯一性索引
    普通索引:CREATE INDEX mycolumn_index ON mytable (myclumn)
    唯一性索引:保證在索引列中的全部數(shù)據(jù)是唯一的,對聚簇索引和非聚簇索引都可以使用
    CREATE UNIQUE COUSTERED INDEX myclumn_cindex ON mytable(mycolumn)
    3.單個索引和復合索引
    單個索引:即非復合索引
    復合索引:又叫組合索引,在索引建立語句中同時包含多個字段名,最多16個字段
    CREATE INDEX name_index ON username(firstname,lastname)
    4.聚簇索引和非聚簇索引(聚集索引,群集索引)
   聚簇索引:物理索引,與基表的物理順序相同,數(shù)據(jù)值的順序總是按照順序排列
    CREATE CLUSTERED INDEX mycolumn_cindex ON mytable(mycolumn) WITH
    ALLOW_DUP_ROW(允許有重復記錄的聚簇索引)
   非聚簇索引:CREATE UNCLUSTERED INDEX mycolumn_cindex ON mytable(mycolumn)

六、索引的使用
   1.當字段數(shù)據(jù)更新頻率較低,查詢使用頻率較高并且存在大量重復值是建議使用聚簇索引
    2.經(jīng)常同時存取多列,且每列都含有重復值可考慮建立組合索引
    3.復合索引的前導列一定好控制好,否則無法起到索引的效果。如果查詢時前導列不在查詢條件中則該復合索引不會被使用。前導列一定是使用最頻繁的列
    4.多表操作在被實際執(zhí)行前,查詢優(yōu)化器會根據(jù)連接條件,列出幾組可能的連接方案并從中找出系統(tǒng)開銷最小的最佳方案。連接條件要充份考慮帶有索引的表、行數(shù)多的表;內(nèi)外表的選擇可由公式:外層表中的匹配行數(shù)*內(nèi)層表中每一次查找的次數(shù)確定,乘積最小為最佳方案
    5.where子句中對列的任何操作結(jié)果都是在sql運行時逐列計算得到的,因此它不得不進行表搜索,而沒有使用該列上面的索引;如果這些結(jié)果在查詢編譯時就能得到,那么就可以被sql優(yōu)化器優(yōu)化,使用索引,避免表搜索(例:select * from record where substring(card_no,1,4)=’5378’
&& select * from record where card_no like ’5378%’)任何對列的操作都將導致表掃描,它包括數(shù)據(jù)庫函數(shù)、計算表達式等等,查詢時要盡可能將操作移至等號右邊
    6.where條件中的’in’在邏輯上相當于’or’,所以語法分析器會將in ('0','1')轉(zhuǎn)化為column='0' or column='1'來執(zhí)行。我們期望它會根據(jù)每個or子句分別查找,再將結(jié)果相加,這樣可以利用column上的索引;但實際上它卻采用了"or策略",即先取出滿足每個or子句的行,存入臨時數(shù)據(jù)庫的工作表中,再建立唯一索引以去掉重復行,最后從這個臨時表中計算結(jié)果。因此,實際過程沒有利用column上索引,并且完成時間還要受tempdb數(shù)據(jù)庫性能的影響。in、or子句常會使用工作表,使索引失效;如果不產(chǎn)生大量重復值,可以考慮把子句拆開;拆開的子句中應該包含索引
    7.要善于使用存儲過程,它使sql變得更加靈活和高效


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 金寨县| 庆城县| 滦平县| 水城县| 乌海市| 丹寨县| 临朐县| 兴业县| 扎鲁特旗| 连平县| 扎赉特旗| 舟山市| 营山县| 石泉县| 万源市| 遂溪县| 五指山市| 莱西市| 佳木斯市| 五原县| 佛冈县| 丰原市| 舞阳县| 鄯善县| 上高县| 乐业县| 喜德县| 沽源县| 延吉市| 玉门市| 巴塘县| 喜德县| 监利县| 榕江县| 精河县| 安远县| 湟中县| 通州区| 曲周县| 新余市| 石台县|