久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

優(yōu)化SQL Server 索引的小技巧有哪些

136次閱讀
沒有評論

共計(jì) 2075 個字符,預(yù)計(jì)需要花費(fèi) 6 分鐘才能閱讀完成。

優(yōu)化 SQL Server 索引的小技巧有哪些,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面丸趣 TV 小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

在本文中,我將說明如何用 SQL Server 的工具來優(yōu)化數(shù)據(jù)庫索引的使用,本文還涉及到有關(guān)索引的一般性知識。關(guān)于索引的常識

影響到數(shù)據(jù)庫性能的最大因素就是索引。由于該問題的復(fù)雜性,我只可能簡單的談?wù)勥@個問題,不過關(guān)于這方面的問題,目前有好幾本不錯的書籍可供你參閱。我在這里只討論兩種 SQL Server 索引,即 clustered 索引和 nonclustered 索引。當(dāng)考察建立什么類型的索引時(shí),你應(yīng)當(dāng)考慮數(shù)據(jù)類型和保存這些數(shù)據(jù)的 column。同樣,你也必須考慮數(shù)據(jù)庫可能用到的查詢類型以及使用的最為頻繁的查詢類型。

索引的類型

如果 column 保存了高度相關(guān)的數(shù)據(jù),并且常常被順序訪問時(shí),最好使用 clustered 索引,這是因?yàn)槿绻褂?clustered 索引,SQL Server 會在物理上按升序(默認(rèn))或者降序重排數(shù)據(jù)列,這樣就可以迅速的找到被查詢的數(shù)據(jù)。同樣,在搜尋控制在一定范圍內(nèi)的情況下,對這些 column 也最好使用 clustered 索引。這是因?yàn)橛捎谖锢砩现嘏艛?shù)據(jù),每個表格上只有一個 clustered 索引。

與上面情況相反,如果 columns 包含的數(shù)據(jù)相關(guān)性較差,你可以使用 nonculstered 索引。你可以在一個表格中使用高達(dá) 249 個 nonclustered 索引——盡管我想象不出實(shí)際應(yīng)用場合會用的上這么多索引。

當(dāng)表格使用主關(guān)鍵字(primary keys),默認(rèn)情況下 SQL Server 會自動對包含該關(guān)鍵字的 column(s) 建立一個獨(dú)有的 cluster 索引。很顯然,對這些 column(s) 建立獨(dú)有索引意味著主關(guān)鍵字的唯一性。當(dāng)建立外關(guān)鍵字(foreign key)關(guān)系時(shí),如果你打算頻繁使用它,那么在外關(guān)鍵字 cloumn 上建立 nonclustered 索引不失為一個好的方法。如果表格有 clustered 索引,那么它用一個鏈表來維護(hù)數(shù)據(jù)頁之間的關(guān)系。相反,如果表格沒有 clustered 索引,SQL Server 將在一個堆棧中保存數(shù)據(jù)頁。

數(shù)據(jù)頁

當(dāng)索引建立起來的時(shí)候,SQLServer 就建立數(shù)據(jù)頁(datapage),數(shù)據(jù)頁是用以加速搜索的指針。當(dāng)索引建立起來的時(shí)候,其對應(yīng)的填充因子也即被設(shè)置。設(shè)置填充因子的目的是為了指示該索引中數(shù)據(jù)頁的百分比。隨著時(shí)間的推移,數(shù)據(jù)庫的更新會消耗掉已有的空閑空間,這就會導(dǎo)致頁被拆分。頁拆分的后果是降低了索引的性能,因而使用該索引的查詢會導(dǎo)致數(shù)據(jù)存儲的支離破碎。當(dāng)建立一個索引時(shí),該索引的填充因子即被設(shè)置好了,因此填充因子不能動態(tài)維護(hù)。為了更新數(shù)據(jù)頁中的填充因子,我們可以停止舊有索引并重建索引,并重新設(shè)置填充因子(注意:這將影響到當(dāng)前數(shù)據(jù)庫的運(yùn)行,在重要場合請謹(jǐn)慎使用)。DBCC INDEXDEFRAG 和 DBCC DBREINDEX 是清除 clustered 和 nonculstered 索引碎片的兩個命令。INDEXDEFRAG 是一種在線操作(也就是說,它不會阻塞其它表格動作,如查詢),而 DBREINDEX 則在物理上重建索引。在絕大多數(shù)情況下,重建索引可以更好的消除碎片,但是這個優(yōu)點(diǎn)是以阻塞當(dāng)前發(fā)生在該索引所在表格上其它動作為代價(jià)換取來得。當(dāng)出現(xiàn)較大的碎片索引時(shí),INDEXDEFRAG 會花上一段比較長的時(shí)間,這是因?yàn)樵撁畹倪\(yùn)行是基于小的交互塊(transactional block)。

填充因子

當(dāng)你執(zhí)行上述措施中的任何一個,數(shù)據(jù)庫引擎可以更有效的返回編入索引的數(shù)據(jù)。關(guān)于填充因子(fillfactor)話題已經(jīng)超出了本文的范疇,不過我還是提醒你需要注意那些打算使用填充因子建立索引的表格。

在執(zhí)行查詢時(shí),SQL Server 動態(tài)選擇使用哪個索引。為此,SQL Server 根據(jù)每個索引上分布在該關(guān)鍵字上的統(tǒng)計(jì)量來決定使用哪個索引。值得注意的是,經(jīng)過日常的數(shù)據(jù)庫活動(如插入、刪除和更新表格),SQL Server 用到的這些統(tǒng)計(jì)量可能已經(jīng)“過期”了,需要更新。你可以通過執(zhí)行 DBCC SHOWCONTIG 來查看統(tǒng)計(jì)量的狀態(tài)。當(dāng)你認(rèn)為統(tǒng)計(jì)量已經(jīng)“過期”時(shí),你可以執(zhí)行該表格的 UPDATE STATISTICS 命令,這樣 SQL Server 就刷新了關(guān)于該索引的信息了。

建立數(shù)據(jù)庫維護(hù)計(jì)劃

SQL Server 提供了一種簡化并自動維護(hù)數(shù)據(jù)庫的工具。這個稱之為數(shù)據(jù)庫維護(hù)計(jì)劃向?qū)В―atabase Maintenance Plan Wizard,DMPW)的工具也包括了對索引的優(yōu)化。如果你運(yùn)行這個向?qū)В銜吹疥P(guān)于數(shù)據(jù)庫中關(guān)于索引的統(tǒng)計(jì)量,這些統(tǒng)計(jì)量作為日志工作并定時(shí)更新,這樣就減輕了手工重建索引所帶來的工作量。如果你不想自動定期刷新索引統(tǒng)計(jì)量,你還可以在 DMPW 中選擇重新組織數(shù)據(jù)和數(shù)據(jù)頁,這將停止舊有索引并按特定的填充因子重建索引。

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注丸趣 TV 行業(yè)資訊頻道,感謝您對丸趣 TV 的支持。

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-07-18發(fā)表,共計(jì)2075字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 华池县| 蕲春县| 阿拉尔市| 汉阴县| 邵阳县| 沂南县| 宜君县| 科尔| 西乌| 雷波县| 普陀区| 南澳县| 南充市| 睢宁县| 定襄县| 楚雄市| 宜黄县| 桓台县| 台江县| 兴义市| 沈阳市| 德惠市| 富锦市| 调兵山市| 章丘市| 琼海市| 梅河口市| 普兰店市| 海原县| 兴安县| 海兴县| 班玛县| 友谊县| 宜宾县| 青岛市| 正安县| 温泉县| 丰镇市| 湘潭县| 安龙县| 磐安县|