自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

SQL Server索引管理之六大鐵律

運(yùn)維 數(shù)據(jù)庫(kù)運(yùn)維 SQL Server
通過(guò)索引,可以加快數(shù)據(jù)的查詢速度和減少系統(tǒng)的響應(yīng)時(shí)間;可以使表和表之間的連接速度加快。但是,不是在任何時(shí)候使用索引都能夠達(dá)到這種效果。若在不恰當(dāng)?shù)膱?chǎng)合下,使用索引反而會(huì)事與愿違。

索引是以表列為基礎(chǔ)的數(shù)據(jù)庫(kù)對(duì)象。索引中保存著表中排序的索引列,并且紀(jì)錄了索引列在數(shù)據(jù)庫(kù)表中的物理存儲(chǔ)位置,實(shí)現(xiàn)了表中數(shù)據(jù)的邏輯排序。通過(guò)索引,可以加快數(shù)據(jù)的查詢速度和減少系統(tǒng)的響應(yīng)時(shí)間;可以使表和表之間的連接速度加快。

但是,不是在任何時(shí)候使用索引都能夠達(dá)到這種效果。若在不恰當(dāng)?shù)膱?chǎng)合下,使用索引反而會(huì)事與愿違。所以,在SQL Server數(shù)據(jù)庫(kù)中使用索引的話,還是需要遵守一定的規(guī)則。

鐵律一:天下沒(méi)有免費(fèi)的午餐,使用索引是需要付出代價(jià)的

索引的優(yōu)點(diǎn)有目共睹,但是,卻很少有人關(guān)心過(guò)采用索引所需要付出的成本。若數(shù)據(jù)庫(kù)管理員能夠?qū)λ饕枰冻龅拇鷥r(jià)有一個(gè)充分的認(rèn)識(shí),也就不會(huì)那么隨意到處建立索引了。

仔細(xì)數(shù)數(shù),其實(shí)建立索引的代價(jià)還是蠻大的。如創(chuàng)建索引和維護(hù)索引都需要花費(fèi)時(shí)間與精力。特別是在數(shù)據(jù)庫(kù)設(shè)計(jì)的時(shí)候,數(shù)據(jù)庫(kù)管理員為表中的哪些字段需要建立索引,要調(diào)研、要協(xié)調(diào)。如當(dāng)建有索引的表中的紀(jì)錄又增加、刪除、修改操作時(shí),數(shù)據(jù)庫(kù)要對(duì)索引進(jìn)行重新調(diào)整。雖然這個(gè)工作數(shù)據(jù)庫(kù)自動(dòng)會(huì)完成,但是,需要消耗服務(wù)器的資源。當(dāng)表中的數(shù)據(jù)越多,這個(gè)消耗的資源也就越多。如索引是數(shù)據(jù)庫(kù)中實(shí)際存在的對(duì)象,所以,每個(gè)索引都會(huì)占用一定的物理空間。若索引多了,不但會(huì)占用大量的物理空間,而且,也會(huì)影響到整個(gè)數(shù)據(jù)庫(kù)的運(yùn)行性能。

可見(jiàn),數(shù)據(jù)庫(kù)管理員若要采用索引來(lái)提高系統(tǒng)的性能,自身仍然需要付出不少的代價(jià)。數(shù)據(jù)庫(kù)管理員現(xiàn)在要考慮的就是如何在這兩個(gè)之間取得一個(gè)均衡?;蛘哒f(shuō),找到一個(gè)回報(bào)與投入的臨界點(diǎn)。

鐵律二:對(duì)于查詢中很少涉及的列或者重復(fù)值比較多的列,不要建立索引

在查詢的時(shí)候,如果我們不按某個(gè)字段去查詢,則在這個(gè)字段上建立索引也是浪費(fèi)。如現(xiàn)在有一張員工信息表,我們可能按員工編號(hào)、員工姓名、或者出身地去查詢員工信息。但是,我們往往不會(huì)按照身份證號(hào)碼去查詢。雖然這個(gè)身份證號(hào)碼是唯一的。此時(shí),即使在這個(gè)字段上建立索引,也不能夠提高查詢的速度。相反,增加了系統(tǒng)維護(hù)時(shí)間和占用了系統(tǒng)空間。這簡(jiǎn)直就是搬起石頭砸自己的腳呀。

另外,如上面的員工信息表,有些字段重復(fù)值比較多。如性別字段主要就是“男”、“女”;職位字段中也是有限的幾個(gè)內(nèi)容。此時(shí),在這些字段上添加索引也不會(huì)顯著的增加查詢速度,減少用戶響應(yīng)時(shí)間。相反,因?yàn)樾枰加每臻g,反而會(huì)降低數(shù)據(jù)庫(kù)的整體性能。

數(shù)據(jù)庫(kù)索引管理中的第二條鐵律就是,對(duì)于查詢中很少涉及的列或者重復(fù)值比較多的列,不要建立索引。

鐵律三:對(duì)于按范圍查詢的列,最好建立索引

在信息化管理系統(tǒng)中,很多時(shí)候需要按范圍來(lái)查詢某些交易記錄。如在ERP系統(tǒng)中,經(jīng)常需要查詢當(dāng)月的銷售訂單與銷售出貨情況,這就需要按日期范圍來(lái)查詢交易記錄。如有時(shí)候發(fā)現(xiàn)庫(kù)存不對(duì)時(shí),也需要某段時(shí)期的庫(kù)存進(jìn)出情況,如5月1日到12月3日的庫(kù)存交易情況等等。此時(shí),也是根據(jù)日期來(lái)進(jìn)行查詢。

對(duì)于這些需要在指定范圍內(nèi)快速或者頻繁查詢的數(shù)據(jù)列,需要為其建立索引。因?yàn)樗饕呀?jīng)排序,其保存的時(shí)候指定的范圍是連續(xù)的,查詢可以利用索引的排序,加快查詢時(shí)間,減少用戶等待時(shí)間。

不過(guò),若雖然可能需要按范圍來(lái)進(jìn)行查詢,但是,若這個(gè)范圍查詢條件利用的不多的情況下,最好不好采用索引。如在員工信息表中,可能需要查詢2008年3月份以前入職的員工明細(xì),要為他們?cè)黾痈@?。但是,由于表中記錄不多,而且,也很少進(jìn)行類似的查詢。若維這個(gè)字段建立索引,雖然無(wú)傷大雅,但是很明顯,索引所獲得的收益要低于其成本支出。對(duì)數(shù)據(jù)庫(kù)管理員來(lái)說(shuō),是得不償失的。

再者,若采用范圍查詢的話,最好能利用TOP關(guān)鍵字來(lái)限制一次查詢的結(jié)果。如第一次按順序只顯示前面的500條記錄等等。把TOP關(guān)鍵字跟范圍一起使用,可以大大的提高查詢的效率。

鐵律四:表中若有主鍵或者外鍵,一定要為其建立索引

定義有主鍵的索引列,一定要為其建立索引。因?yàn)橹麈I可以加速定位到表中的某一行。結(jié)合索引的作用,可以使得查詢的速度加倍。如在員工信息表中,我們往往把員工編號(hào)設(shè)置為主鍵。因?yàn)檫@不但可以提高查詢的速度,而且因?yàn)橹麈I要求記錄的唯一,還可以保證員工編號(hào)的唯一性。此時(shí),若再把這個(gè)員工編號(hào)字段設(shè)置為索引,則通過(guò)員工編號(hào)來(lái)查詢員工信息,其效率要比沒(méi)有建立索引高出許多。

另外,若要使得某個(gè)字段的值唯一,可以通過(guò)兩種索引方式實(shí)現(xiàn)。一種就是上面所講的主鍵索引。還有一種就是唯一索引,利用UNIQUE關(guān)鍵字指定字段內(nèi)容的唯一性。這兩種方式都會(huì)在表中的指定列上自動(dòng)創(chuàng)建唯一索引。這兩種方式的結(jié)果沒(méi)有明顯的區(qū)別。查詢優(yōu)化器不會(huì)區(qū)分到底是哪種方式建立的唯一性索引,而且他們進(jìn)行數(shù)據(jù)查詢的方式也是相同的。

若某張表中的數(shù)據(jù)列定義有外鍵,則最好也要為這個(gè)字段建立索引。因?yàn)橥怄I的主要作用就在于表與表之間的連接查詢。若在外鍵上建立索引,可以加速表與表之間的連接查詢。如在員工基本信息表中,有一個(gè)字段為員工職位。由于員工職位經(jīng)常在變化,在這里,存儲(chǔ)的其實(shí)只是一個(gè)員工職位的代碼。在另外一張職位信息表中詳細(xì)記錄著該職位的相關(guān)信息。此時(shí),這個(gè)員工職位字段就是外鍵。若在這個(gè)字段上建立外鍵,則可以顯著提高兩張表的連接速度。而且,記錄越多,其效果越加明顯。

所以,當(dāng)表中有外鍵或者主鍵的時(shí)候,就最好為其建立索引。通過(guò)索引,可以強(qiáng)化主鍵與外鍵的作用,提高數(shù)據(jù)庫(kù)的性能。

鐵律五:對(duì)于一些特殊的數(shù)據(jù)類型,不要建立索引

在表中,有些字段比較特殊。如文本字段(TXT)、圖像類型字段(IMAGE)等等。如果表中的字段屬于這些數(shù)據(jù)類型,則最好不要為其建立索引。因?yàn)檫@些字段有一些共同的特點(diǎn)。如長(zhǎng)度不確定,要么很長(zhǎng),幾個(gè)字符;要么就是空字符串。如文本數(shù)據(jù)類型常在應(yīng)用系統(tǒng)的數(shù)據(jù)庫(kù)表中用來(lái)做備注的數(shù)據(jù)類型。有時(shí)候備注很長(zhǎng),但有時(shí)候又沒(méi)有數(shù)據(jù)。若這種類型的字段上建立索引,那根本起不了作用。相反,還增加了系統(tǒng)的負(fù)擔(dān)。

所以,在一些比較特殊的數(shù)據(jù)類型上,建立索引要謹(jǐn)慎。在通常情況下,沒(méi)有必要為其建立索引。但是,也有特殊的情況。如有時(shí)候,在ERP系統(tǒng)中,有產(chǎn)品信息這個(gè)表,其中有個(gè)產(chǎn)品規(guī)格這個(gè)字段。有時(shí)候,其長(zhǎng)度可能長(zhǎng)達(dá)5000個(gè)字符。此時(shí),只有文本型的數(shù)據(jù)類型可以容納這么大的數(shù)據(jù)量。而且,在查詢的時(shí)候,用戶又喜歡通過(guò)規(guī)格這個(gè)參數(shù)來(lái)查詢產(chǎn)品信息。此時(shí),若不為這個(gè)字段建立索引的話,則查詢的速度會(huì)很慢。遇到這種情況時(shí),數(shù)據(jù)庫(kù)管理員只有犧牲一點(diǎn)系統(tǒng)資源,為其建立索引。

從這里也可以看出,雖然以上幾條說(shuō)的時(shí)鐵律,但是,是否需要遵循,還是需要數(shù)據(jù)庫(kù)管理員根據(jù)企業(yè)的實(shí)際情況,做出合理的選擇。

鐵律六:索引可以跟Where語(yǔ)句的集合融為一體

用戶在查詢信息的時(shí)候,有時(shí)會(huì)經(jīng)常會(huì)用到一些限制語(yǔ)句。如在查詢銷售訂單的時(shí)候,經(jīng)常會(huì)用到客戶以及下單日期的條件集合;如在查詢某個(gè)產(chǎn)品的庫(kù)存交易情況時(shí),就會(huì)利用產(chǎn)品編號(hào)與交易日期起止日期的條件集合。

對(duì)于這些經(jīng)常用在Where子句中的數(shù)據(jù)列,將索引建立在Where子句的集合過(guò)程中,對(duì)于需要加速或者頻繁檢索的數(shù)據(jù)列,可以讓這些經(jīng)常參與查詢的數(shù)據(jù)列按照索引的排序進(jìn)行查詢,以加快查詢的時(shí)間。

總之,索引就好像一把雙刃劍,即可以提高數(shù)據(jù)庫(kù)的性能,也可能對(duì)數(shù)據(jù)庫(kù)的性能起到反面作用。作為數(shù)據(jù)庫(kù)管理員,要有這個(gè)能力判斷在合適的時(shí)間、合適的業(yè)務(wù)、合適的字段上建立合適的索引。以上六個(gè)鐵律,只是對(duì)建立索引的一些基本要求。

【編輯推薦】

  1. 如何在SQL Server數(shù)據(jù)庫(kù)中成批導(dǎo)入數(shù)據(jù)
  2. 把數(shù)據(jù)從SQL Server輸出到文本文件
  3. SQL Server查詢過(guò)程的內(nèi)存實(shí)際消耗
責(zé)任編輯:楊鵬飛 來(lái)源: IT專家網(wǎng)
相關(guān)推薦

2010-09-27 11:55:47

SQL索引

2010-11-25 09:04:38

系統(tǒng)管理員

2025-04-02 00:00:04

2011-07-25 09:43:38

目標(biāo)設(shè)備管理工具日志文件

2010-04-12 17:31:23

2022-04-15 11:36:03

SaaS安全數(shù)據(jù)安全網(wǎng)絡(luò)安全

2011-04-27 09:34:23

VMware vCen

2021-02-26 08:17:57

操作系統(tǒng)信號(hào)量

2018-07-05 04:42:26

網(wǎng)絡(luò)管理IT網(wǎng)絡(luò)連續(xù)性

2012-05-23 11:31:09

瀏覽器帳號(hào)管理

2013-07-01 09:46:06

風(fēng)險(xiǎn)管理安全風(fēng)險(xiǎn)管理

2014-06-12 08:58:04

運(yùn)維

2024-08-12 16:21:18

2012-06-04 16:01:29

Linux服務(wù)器日志

2023-02-21 09:16:00

CPU散熱器超頻

2010-07-30 13:15:17

Flex優(yōu)勢(shì)

2023-10-18 10:48:44

Python解釋器

2009-01-16 22:10:00

服務(wù)器虛擬化

2024-10-22 14:42:14

2010-08-16 10:14:23

云計(jì)算誤區(qū)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)