日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQL Server 数据库的整理优化的基本过程(二)

發(fā)布時(shí)間:2025/4/5 数据库 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL Server 数据库的整理优化的基本过程(二) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

SQL Server 數(shù)據(jù)庫的整理優(yōu)化的基本過程(二)

高建剛

第一節(jié) 基本維護(hù)

第二節(jié) 索引

?

索引相信大家都不陌生,而且在因特網(wǎng)上,有了很多關(guān)于如何通過索引來優(yōu)化數(shù)據(jù)庫的文章,在這里,我主要是結(jié)合我的使用情況向大家推薦關(guān)于索引如何來提高和改善數(shù)據(jù)庫性能的。

眾所周知,在數(shù)據(jù)庫的數(shù)據(jù)存儲(chǔ)方面,數(shù)據(jù)是以分頁的形式存儲(chǔ)的,在數(shù)據(jù)量較小的時(shí)候,如果我們不建立索引,那么整體的性能可能不會(huì)受到多大影響,但是如果數(shù)據(jù)量較大,達(dá)到千萬、甚至過億,如果仍然不采用索引,數(shù)據(jù)庫的檢索仍然會(huì)去遍歷所有的頁去找找你想要的那一點(diǎn)點(diǎn)數(shù)據(jù),就會(huì)感覺到簡(jiǎn)單的查詢效率很低,客戶抱怨,前端的程序開發(fā)人員也對(duì)數(shù)據(jù)庫性能不滿意,因此使用索引來提高性能這時(shí)候就顯得特別重要了。

SQL Server 中索引的存放是以平衡樹 Balance-Tree(B-Tree) 結(jié)構(gòu)順序存放的,在有效的利用索引時(shí),系統(tǒng)會(huì)根據(jù)建立的索引樹,通過二分查找方式查找符合條件的記錄,同時(shí)建立索引后,索引所占用的硬盤空間也會(huì)比每條數(shù)據(jù)記錄的硬盤空間小一些,所以說無論是查找方式和讀取硬盤的空間都可以達(dá)到提高性能和查詢效率的目的。索引的理解,好比一本書的目錄,讀者可以通過目錄去快速找到自己想看的章節(jié),而目錄在整本書的占用書本頁數(shù)少,結(jié)構(gòu)簡(jiǎn)單,索引也是同樣的道理,這樣可能理解起來就比較容易接受了。

SQL Server 中,索引的結(jié)構(gòu)包含三方面,根節(jié)點(diǎn)分頁 (Root Level) ,即索引結(jié)構(gòu)的開始。子葉層 (Leaf Level) ,索引的最下層。非子葉層 (Non-Leaf Level) ,介于子葉層和根節(jié)點(diǎn)之間的結(jié)構(gòu)。

SQL Server 的索引分為聚集索引和非聚集索引兩類 ( 后續(xù)內(nèi)容會(huì)單獨(dú)介紹全文檢索和全文索引 ) 。聚集索引每個(gè)表只能存在一個(gè),它的建立標(biāo)志著數(shù)據(jù)表本身就是索引的一部分,因?yàn)橹付司奂饕?#xff0c;整個(gè)表的數(shù)據(jù)存儲(chǔ)都會(huì)按照用戶建立的聚集索引來擺放,在 SQL Server2000 以后的版本中,聚集索引已經(jīng)可以指定由大到小還是由小到大的順序了 ( 還有分區(qū)、在線等其他特性,在此不累述 ) 。索引建立后會(huì)生成索引結(jié)構(gòu),也就是索引的根節(jié)點(diǎn)和非子葉層級(jí),從而完成整個(gè)聚集索引的整體結(jié)構(gòu)。數(shù)據(jù)表的數(shù)據(jù)的存放只能有一種原則,所以每個(gè)表的索引也就只能有一個(gè)聚集索引了。所以選擇一個(gè)表的字段作為聚集索引時(shí),要慎重。

那么建立聚集索引有什么樣的技巧哪?首先我們強(qiáng)調(diào)一點(diǎn),聚集索引和主鍵是兩碼事,不可混為一談,它們分別是表結(jié)構(gòu)的兩個(gè)重要的機(jī)制,有共同的特性,是數(shù)據(jù)表的重要部分構(gòu)成,但是兩者在應(yīng)用上存在著本質(zhì)的區(qū)別,雖然 SQL Server 在你不指定聚集索引時(shí),會(huì)默認(rèn)為主鍵就是聚集索引,但是仍然要記住聚集索引和主鍵盡量區(qū)分對(duì)待,聚集索引的建立主要是從數(shù)據(jù)的讀取效率來考慮的,比如說人員信息表,設(shè)計(jì)上主鍵一般是人員編號(hào),但是我們?cè)诶萌藛T信息表的時(shí)候,一般都會(huì)以姓名來過濾或排序,所以我們一般把聚集索引建立在姓名的字段上。

既然提到了主鍵,在這里簡(jiǎn)單描述一下主鍵 ( 看好了,說的是主鍵 ) ,主鍵是數(shù)據(jù)庫設(shè)計(jì)的主要部分,它是數(shù)據(jù)正確性和完整性的保證,建立主鍵時(shí)我們應(yīng)該考慮數(shù)據(jù)庫的第三范式的定義和要求,即所有字段內(nèi)容都與主鍵有直接關(guān)聯(lián),而沒有間接關(guān)聯(lián),同時(shí)主鍵也是用來唯一定義表數(shù)據(jù)的單一記錄,選擇主鍵時(shí),要堅(jiān)持唯一、最小、不可為 NULL 、易獲取、基本不變更等條件。

再談非聚集索引,非聚集索引從結(jié)構(gòu)上來說,他是完全獨(dú)立于數(shù)據(jù)表之外的結(jié)構(gòu),其子葉層存放數(shù)據(jù)存在著兩種類型:書簽和聚集索引的鍵值,原則是根據(jù)表是否存在聚集索引來區(qū)別的。如果表沒有建立聚集索引那么子葉層存放的字段鍵值和指向數(shù)據(jù)表符合鍵值記錄的 Row ID ,也就是說文檔編號(hào)、分頁編號(hào)與頁內(nèi)記錄編號(hào)所組合的值 (slot 編號(hào) ) ,即 Heap 數(shù)據(jù)表。而直接通過 Row ID 來獲取數(shù)據(jù),就是書簽查找,稱為 bookmark lookup 。一般的非聚集索引都是要結(jié)合聚集索引的,否則只使用非聚集索引可能還會(huì)導(dǎo)致數(shù)據(jù)檢索的緩慢,所以要盡量保證數(shù)據(jù)表的聚集索引的存在和合理性。非聚集索引在一個(gè)表上可以存在 249 個(gè),但是建議每個(gè)表的聚集索引不要超過 10 個(gè)。

了解了上述內(nèi)容后,我們?cè)诮⑺饕臅r(shí)候,就可以從整體上去考慮如何建立聚集索引和非聚集索引了。

首先,索引是用來幫助在大數(shù)據(jù)量的表中查找少量數(shù)據(jù)而建立的,所以聚集索引的結(jié)構(gòu)所占空間應(yīng)遠(yuǎn)遠(yuǎn)小于數(shù)據(jù)庫表本身,想想如果一本書 400 頁,目錄就有 300 頁,你會(huì)看目錄嗎?

其次,索引鍵值的重復(fù)性越低越好。好比我們?cè)谝槐緯锩嬗谩暗摹比フ覍?#xff0c;幾乎每頁都有一大堆,重復(fù)性極高,索引會(huì)反復(fù)在前后頁面讀取,還不如直接遍歷效率高。

總之,建立索引一般要遵循數(shù)據(jù)類型盡量為整型、數(shù)據(jù)本身盡量唯一、不可為空值等原則。

最后強(qiáng)調(diào),建立索引后,數(shù)據(jù)的增刪改會(huì)造成索引的自動(dòng)維護(hù),所以建立合理的索引就要求特別高,另外為保證數(shù)據(jù)的增刪改的效率,建議類似實(shí)時(shí)查詢、實(shí)時(shí)監(jiān)控之類的在反復(fù)讀取數(shù)據(jù),但查詢結(jié)果不要求非常準(zhǔn)確的時(shí)候,可以在 SELECT 的語句上增加臟讀的關(guān)鍵字,以便提高總體的數(shù)據(jù)庫效率。

羅嗦了很多,不知道大家是越看越糊涂,請(qǐng)批評(píng)指正!下一節(jié),嘮叨一下索引的維護(hù),望關(guān)注。

?

轉(zhuǎn)載于:https://www.cnblogs.com/Gaojier/archive/2010/08/02/2783528.html

總結(jié)

以上是生活随笔為你收集整理的SQL Server 数据库的整理优化的基本过程(二)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。