教你一招:MSSQL數(shù)據(jù)庫索引的應(yīng)用_Mssql數(shù)據(jù)庫教程
推薦:恢復(fù)系統(tǒng)數(shù)據(jù)庫 msdb-包含了有關(guān)作業(yè)、報警及操作員等信息如果包含系統(tǒng)數(shù)據(jù)庫的介質(zhì)變了,那么必須重建系統(tǒng)數(shù)據(jù)庫,如果你仍然可以啟動SQL Server服務(wù),則可以通過RESTORE語句從系統(tǒng)數(shù)據(jù)庫的備份中恢復(fù)數(shù)據(jù)
一、索引的概念
索引就是加快檢索表中數(shù)據(jù)的方法。數(shù)據(jù)庫的索引類似于書籍的索引。在書籍中,索引允許用戶不必翻閱完整個書就能迅速地找到所需要的信息。在數(shù)據(jù)庫中,索引也允許數(shù)據(jù)庫程序迅速地找到表中的數(shù)據(jù),而不必掃描整個數(shù)據(jù)庫。
二、索引的特點(diǎn)
1.索引可以加快數(shù)據(jù)庫的檢索速度
2.索引降低了數(shù)據(jù)庫插入、修改、刪除等維護(hù)任務(wù)的速度
3.索引創(chuàng)建在表上,不能創(chuàng)建在視圖上
4.索引既可以直接創(chuàng)建,也可以間接創(chuàng)建
5.可以在優(yōu)化隱藏中,使用索引
6.使用查詢處理器執(zhí)行SQL語句,在一個表上,一次只能使用一個索引
7.其他
三、索引的優(yōu)點(diǎn)
1.創(chuàng)建唯一性索引,保證數(shù)據(jù)庫表中每一行數(shù)據(jù)的唯一性
2.大大加快數(shù)據(jù)的檢索速度,這也是創(chuàng)建索引的最主要的原因
3.加速表和表之間的連接,特別是在實(shí)現(xiàn)數(shù)據(jù)的參考完整性方面特別有意義。
4.在使用分組和排序子句進(jìn)行數(shù)據(jù)檢索時,同樣可以顯著減少查詢中分組和排序的時間。
5.通過使用索引,可以在查詢的過程中使用優(yōu)化隱藏器,提高系統(tǒng)的性能。
四、索引的缺點(diǎn)
1.創(chuàng)建索引和維護(hù)索引要耗費(fèi)時間,這種時間隨著數(shù)據(jù)量的增加而增加
2.索引需要占物理空間,除了數(shù)據(jù)表占數(shù)據(jù)空間之外,每一個索引還要占一定的物理空間,如果要建立聚簇索引,那么需要的空間就會更大
3.當(dāng)對表中的數(shù)據(jù)進(jìn)行增加、刪除和修改的時候,索引也要動態(tài)的維護(hù),降低了數(shù)據(jù)的維護(hù)速度
五、索引分類
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.單個索引和復(fù)合索引
單個索引:即非復(fù)合索引
復(fù)合索引:又叫組合索引,在索引建立語句中同時包含多個字段名,最多16個字段
CREATE INDEX name_index ON username(firstname,lastname)
4.聚簇索引和非聚簇索引(聚集索引,群集索引)
聚簇索引:物理索引,與基表的物理順序相同,數(shù)據(jù)值的順序總是按照順序排列
CREATE CLUSTERED INDEX mycolumn_cindex ON mytable(mycolumn) WITH
ALLOW_DUP_ROW(允許有重復(fù)記錄的聚簇索引)
非聚簇索引:
CREATE UNCLUSTERED INDEX mycolumn_cindex ON mytable(mycolumn)
六、索引的使用
1.當(dāng)字段數(shù)據(jù)更新頻率較低,查詢使用頻率較高并且存在大量重復(fù)值是建議使用聚簇索引
2.經(jīng)常同時存取多列,且每列都含有重復(fù)值可考慮建立組合索引
3.復(fù)合索引的前導(dǎo)列一定好控制好,否則無法起到索引的效果。如果查詢時前導(dǎo)列不在查詢條件中則該復(fù)合索引不會被使用。前導(dǎo)列一定是使用最頻繁的列
4.多表操作在被實(shí)際執(zhí)行前,查詢優(yōu)化器會根據(jù)連接條件,列出幾組可能的連接方案并從中找出系統(tǒng)開銷最小的最佳方案。連接條件要充份考慮帶有索引的表、行數(shù)多的表;內(nèi)外表的選擇可由公式:外層表中的匹配行數(shù)靠內(nèi)層表中每一次查找的次數(shù)確定,乘積最小為最佳方案
5.where子句中對列的任何操作結(jié)果都是在sql運(yùn)行時逐列計算得到的,因此它不得不進(jìn)行表搜索,而沒有使用該列上面的索引;如果這些結(jié)果在查詢編譯時就能得到,那么就可以被sql優(yōu)化器優(yōu)化,使用索引,避免表搜索。
例:
| 以下為引用的內(nèi)容: select * from record where substring(card_no,1,4)=’5378’ && select * from record where card_no like ’5378%’ |
任何對列的操作都將導(dǎo)致表掃描,它包括數(shù)據(jù)庫函數(shù)、計算表達(dá)式等等,查詢時要盡可能將操作移至等號右邊
6.where條件中的’in’在邏輯上相當(dāng)于’or’,所以語法分析器會將in ('0','1')轉(zhuǎn)化為column='0' or column='1'來執(zhí)行。我們期望它會根據(jù)每個or子句分別查找,再將結(jié)果相加,這樣可以利用column上的索引;但實(shí)際上它卻采用了"or策略",即先取出滿足每個or子句的行,存入臨時數(shù)據(jù)庫的工作表中,再建立唯一索引以去掉重復(fù)行,最后從這個臨時表中計算結(jié)果。因此,實(shí)際過程沒有利用column上索引,并且完成時間還要受tempdb數(shù)據(jù)庫性能的影響。in、or子句常會使用工作表,使索引失效;如果不產(chǎn)生大量重復(fù)值,可以考慮把子句拆開;拆開的子句中應(yīng)該包含索引
7.要善于使用存儲過程,它使sql變得更加靈活和高效
分享:在SQL Server下數(shù)據(jù)庫鏈接的使用某些情況下:我們希望在一個SQL Server下訪問另一個sqlserver數(shù)據(jù)庫上的數(shù)據(jù),或者訪問其他Oracle數(shù)據(jù)庫上的數(shù)據(jù),要想完成這些操作,我們首要的是創(chuàng)建數(shù)據(jù)庫鏈接。 數(shù)據(jù)庫鏈接能夠讓本地的一
- sql 語句練習(xí)與答案
- 深入C++ string.find()函數(shù)的用法總結(jié)
- SQL Server中刪除重復(fù)數(shù)據(jù)的幾個方法
- sql刪除重復(fù)數(shù)據(jù)的詳細(xì)方法
- SQL SERVER 2000安裝教程圖文詳解
- 使用sql server management studio 2008 無法查看數(shù)據(jù)庫,提示 無法為該請求檢索數(shù)據(jù) 錯誤916解決方法
- SQLServer日志清空語句(sql2000,sql2005,sql2008)
- Sql Server 2008完全卸載方法(其他版本類似)
- sql server 2008 不允許保存更改,您所做的更改要求刪除并重新創(chuàng)建以下表
- SQL Server 2008 清空刪除日志文件(瞬間日志變幾M)
- Win7系統(tǒng)安裝MySQL5.5.21圖解教程
- 將DataTable作為存儲過程參數(shù)的用法實(shí)例詳解
Mssql數(shù)據(jù)庫教程Rss訂閱編程教程搜索
Mssql數(shù)據(jù)庫教程推薦
- AD域中成員服務(wù)器SQL 2008 Server安裝配置圖文教程
- SQL Server 2005中的CLR集成
- 揭秘加快Sql server時間查詢速度的辦法
- 淺析SQL Server 2008中不推薦及不支持的功能
- 關(guān)于SQL Server數(shù)據(jù)庫維度表和事實(shí)表的概述
- 解讀編寫和優(yōu)化SQL Server的存儲過程
- sql server多行數(shù)據(jù)拼接的實(shí)例方法
- 基于Sql Server通用分頁存儲過程的解決方法
- 怎樣處理SQL Server日志文件總結(jié)及日志滿的問題
- SQL2005 性能監(jiān)視器計數(shù)器錯誤解決方法
猜你也喜歡看這些
- MySQL筆記之字符串函數(shù)的應(yīng)用
- KB967723補(bǔ)丁造成的MYSQL在Win2003上頻繁連接不上
- MySQL數(shù)據(jù)庫InnoDB數(shù)據(jù)恢復(fù)工具的使用小結(jié)詳解
- 解析MYSQL 數(shù)據(jù)庫導(dǎo)入SQL 文件出現(xiàn)亂碼的問題
- 網(wǎng)頁模板MySQL出現(xiàn)Can't create/write to file 'C:\Windows\TEMP\#sql_990_0.MYI解決辦法
- MySQL 替換某字段內(nèi)部分內(nèi)容的UPDATE語句
- MySQL觸發(fā)器學(xué)習(xí)總結(jié)
- 解析mysql數(shù)據(jù)庫還原錯誤:(mysql Error Code: 1005 errno 121)
- mysql中text與varchar與char的區(qū)別
- 網(wǎng)站模板:如何捕獲和記錄SQL Server中發(fā)生的死鎖
- 相關(guān)鏈接:
- 教程說明:
Mssql數(shù)據(jù)庫教程-教你一招:MSSQL數(shù)據(jù)庫索引的應(yīng)用
。