




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
資料庫的建立與規(guī)劃第4章本章重點(diǎn)4-1認(rèn)識(shí)系統(tǒng)資料庫4-2系統(tǒng)資料表與檢視表4-3資料庫的規(guī)劃4-4SQLServer資料庫的實(shí)體結(jié)構(gòu)4-5索引的結(jié)構(gòu)與運(yùn)作方式24-1認(rèn)識(shí)系統(tǒng)資料庫SQLServer將與伺服器本身有關(guān)的各項(xiàng)資訊,都存放在特定的資料庫中,這些資料庫稱為『系統(tǒng)資料庫』;相對(duì)於系統(tǒng)資料庫,凡是由我們自行建立的資料庫則稱為使用者資料庫。在安裝SQLServer時(shí),就會(huì)先建好master、msdb、model、tempdb
這四個(gè)基本的系統(tǒng)資料庫,所以我們?cè)贛anagementStudio中瀏覽伺服器時(shí),於系統(tǒng)資料庫節(jié)點(diǎn)下即可看到這些資料庫,而且我們也不能刪除這些資料庫。除此之外,還有一個(gè)隱藏的Resource資料庫,但在ManagementStudio中看不到它。以下簡(jiǎn)單說明這幾個(gè)系統(tǒng)資料庫的用途。3mastermaster資料庫記錄的是有關(guān)SQLServer的資訊,包括所有的登入帳戶、系統(tǒng)的組態(tài)、各資料的初始資訊等各類重要資料。SQLServer基於安全性的考量,不允許我們直接瀏覽、修改各資料庫中的系統(tǒng)資料表,而是必須透過系統(tǒng)檢視表(systemview)來瀏覽。我們可用"select*fromsysobjectswheretype='S'"來查看master資料庫中有多少隱藏起來的資料表。4master由於master資料庫的內(nèi)容對(duì)整個(gè)資料庫系統(tǒng)的關(guān)係重大,因此最好要定時(shí)備份此資料庫的內(nèi)容。在下一節(jié)會(huì)對(duì)master資料庫中幾個(gè)重要的檢視表做簡(jiǎn)單的介紹。5msdbmsdb
是另一個(gè)供系統(tǒng)使用的資料庫,其主要用途是供SQLServerAgent做各類排程作業(yè)(job)所用的資料庫。除了SQLServerAgent的資料外,有關(guān)備份和還原的記錄(參見第8、9章)、複寫(參見第10章)和資料維護(hù)計(jì)劃(見第12章)等資訊也都是放在這個(gè)資料庫中。因此,若您未設(shè)定這類作業(yè),此資料庫中也不會(huì)有什麼特別的內(nèi)容。6msdb同樣的,此資料庫的內(nèi)容是不宜由我們直接做更動(dòng)的,不過有需要的話,倒是可在msdb
資料庫查閱一下作業(yè)的資訊。例如由sysjobhistory
可查看執(zhí)行過的各項(xiàng)作業(yè)之結(jié)果。7modelmodel是個(gè)較特殊的系統(tǒng)資料庫,或許應(yīng)稱它為『樣板』資料庫。當(dāng)我們?cè)赟QLServer中建立新的資料庫時(shí),SQLServer會(huì)以model資料庫為藍(lán)本,將其內(nèi)容複製到我們的新資料庫,因此在所有新建的資料庫中,都會(huì)有和model資料庫內(nèi)容一樣的資料表和檢視表等資料庫物件。8modelmodel和其它系統(tǒng)資料庫不同:有需要的話,我們可以更動(dòng)其內(nèi)容。由於在建立新資料庫時(shí),SQLServer會(huì)複製model的內(nèi)容至新的資料庫中,因此若您希望在日後所建的資料庫中都要加入某項(xiàng)物件,例如某個(gè)特殊的資料庫使用者或角色等,就可以先在model資料庫中建立這些物件。以後在SQLServer中建立新的資料庫時(shí),這些物件也都會(huì)出現(xiàn)在新資料庫中,省下自己再另行建立的麻煩。9tempdb由名稱就可看出,tempdb
是用來存放暫時(shí)性資料用的,像是使用者在進(jìn)行各種查詢或排序時(shí),SQLServer就會(huì)在此建立這些暫時(shí)性的工作資料表。由於是"暫時(shí)性"的,所以tempdb
中的資料沒有什麼保存的價(jià)值,因此每次SQLServer重新啟動(dòng)時(shí),都會(huì)重建一份新的tempdb
資料庫。由於tempdb
資料庫是用來存放各項(xiàng)作業(yè)的暫時(shí)性資料,所以當(dāng)工作資料量變多時(shí),tempdb
資料庫的大小也會(huì)跟著變大,其大小是由SQLServer依需要自動(dòng)調(diào)整的,就像SQLServer會(huì)自動(dòng)調(diào)整所用的記憶體空間一樣。10tempdb因?yàn)槊看蜸QLServer啟動(dòng)時(shí)就會(huì)重新建立tempdb,而前面又說過SQLServer在新建資料庫時(shí)會(huì)將model資料庫的內(nèi)容複製到新資料庫中,所以tempdb
自然也會(huì)包含和model相同的資料庫物件。因此有些人就會(huì)想在model中建立一些物件讓tempdb
來繼承,像是可以讓所有使用者存取tempdb
的權(quán)限等等,不過使用此方法時(shí)也要注意,在建立其它非tempdb
的使用者資料庫時(shí),就要記得去檢查是否要將這些繼承自model資料庫的物件刪除掉或更改其設(shè)定。11Resource雖然在ManagementStudio中根本看不到這個(gè)資料庫,但只要用檔案總管進(jìn)入SQLServer的資料庫檔資料夾(例如ProgramFiles\MicrosoftSQLServer\MSSQL10.MSSQLSERVER\MSSQL\
Binn,讀者電腦的路徑可能與此不同),就可以看到Resource資料庫的資料檔及交易記錄檔mssqlsystemresource.mdf、mssqlsystemresource.ldf。此資料庫檔還不算小,因?yàn)樗娣帕嗽S多與SQLServer本身相關(guān)的系統(tǒng)物件,使用者物件都不會(huì)存放在Resource資料庫中。12ResourceSQLServer2008採(cǎi)用Resource資料庫的目的之一,就是讓系統(tǒng)資源集中存放管理,日後將可透過升級(jí)Resource資料庫的方式,即可升級(jí)SQLServer2008的功能。13認(rèn)識(shí)系統(tǒng)資料庫以上簡(jiǎn)單介紹了SQLServer中內(nèi)建的系統(tǒng),除了這些系統(tǒng)資料庫外,在每個(gè)使用者資料庫中,也會(huì)有一些系統(tǒng)內(nèi)建的物件,其中最重要的就是系統(tǒng)資料表和檢視表,下一節(jié)就來看如何用系統(tǒng)檢視表查看SQLServer系統(tǒng)資料表的內(nèi)容。144-2系統(tǒng)資料表與檢視表系統(tǒng)資料表就是由SQLServer自己建立及使用的資料表,若再加以細(xì)分,可將之分為每個(gè)使用者資料庫都有的系統(tǒng)目錄
(SystemCatalog)資料表,以及master、msdb
等資料庫專有的系統(tǒng)資料表。但正如本章開頭所述,SQLServer不允許我們?nèi)我鉃g覽這些系統(tǒng)資料表的內(nèi)容,而是必須透過SQLServer提供的系統(tǒng)檢視表(用來檢視系統(tǒng)目錄的系統(tǒng)檢視表,又稱為目錄檢視表,Catalogview)。15系統(tǒng)資料表與檢視表由於目錄檢視表、系統(tǒng)檢視表相當(dāng)多,以下僅擇要介紹,讓讀者對(duì)資料庫內(nèi)部結(jié)構(gòu)有一些基本認(rèn)識(shí),完整的系統(tǒng)檢視表資訊請(qǐng)參考線上叢書的介紹。16與資料庫資訊相關(guān)的目錄檢視表在model這個(gè)樣版資料庫中查詢sysobjects
檢視表,可發(fā)現(xiàn)會(huì)被複製到每個(gè)新資料庫的系統(tǒng)目錄資料表共有45個(gè)之多(type欄位值為's'者即為系統(tǒng)目錄資料表)。這些資料表都是用來記錄與該資料庫相關(guān)的各項(xiàng)資訊,透過目錄檢視表即可看到這些資料表中記錄了哪些資訊,以下介紹幾個(gè)重要的檢視表及它們所能查看的資訊。17與資料庫資訊相關(guān)的目錄檢視表sys.allocation_units:列出有關(guān)配置單元(Allocationunit,參見4-4節(jié))的資訊。sys.columns:顧名思義,此檢視表會(huì)傳回有關(guān)欄位(Column)的各項(xiàng)資訊,資料庫中所有資料表和檢視表中的欄位,以及預(yù)存程序中的變數(shù),在此資料表中都會(huì)有一列記錄其資訊。例如若資料表中有個(gè)名為'TelephoneNumber'的欄位,就能在sys.columns
中找出它的相關(guān)記錄。18與資料庫資訊相關(guān)的目錄檢視表19與資料庫資訊相關(guān)的目錄檢視表sys.check_constraints:傳回條件約束(Constrain)與欄位的對(duì)應(yīng)關(guān)係,也就是哪一個(gè)欄位要套用哪一個(gè)條件約束。所以若資料庫中設(shè)定的條件約束多,此檢視表傳回的記錄也會(huì)隨之增加。sys.database_files:傳回資料庫所有檔案的資訊,例如檔案的識(shí)別碼、所屬檔案群組的識(shí)別碼、檔案大小、和檔案的路徑等等。sys.database_permissions:傳回目前資料庫的存取權(quán)限資訊。20與資料庫資訊相關(guān)的目錄檢視表sys.database_principals:由其名稱可看出,此檢視表會(huì)傳回此資料庫中所有使用者與角色物件(統(tǒng)稱為資料層級(jí)的安全性主體,Principal)的資訊,包括主體名稱、識(shí)別碼、類型、預(yù)設(shè)結(jié)構(gòu)描述、建立及修改日期等。sys.database_role_members:會(huì)傳回資料庫中各角色的識(shí)別碼及其成員的識(shí)別碼。sys.filegroups:檢視這個(gè)資料庫所擁有的檔案群組資訊,例如群組的識(shí)別碼和群組的名稱等。sys.foreign_keys:檢視我們?cè)谫Y料表中所設(shè)的FOREIGNKEY資訊。21與資料庫資訊相關(guān)的目錄檢視表sys.fulltext_catalogs:檢視此資料庫中的全文檢索目錄資訊,包括全文檢索目錄的名稱以及存放的路徑等,若未在該資料庫中建立全文檢索目錄,則此資料表會(huì)是空白的。sys.indexes:雖然名稱中只有index這個(gè)字,不過除傳回索引的資訊外,也包含heap的資訊(未建立叢集索引的資料表結(jié)構(gòu)即稱為heap)。sys.index_columns:記錄資料庫中所設(shè)的索引鍵資訊,例如所在的資料表及欄位編號(hào)。22與資料庫資訊相關(guān)的目錄檢視表sys.objects:檢視資料庫所有使用者物件的資訊,包括物件名稱、物件識(shí)別碼、物件的類型、和擁有者的使用者識(shí)別碼等;另外還有個(gè)sys.system_objects
則會(huì)傳回系統(tǒng)物件的資訊。如果想查看資料庫中『所有』物件,則可查看sys.all_objects
或執(zhí)行系統(tǒng)預(yù)存程序sp_help。sys.server_permissions:傳回目前伺服器的存取權(quán)限資訊。23與資料庫資訊相關(guān)的目錄檢視表sys.sql_dependencies:檢視所有檢視表、預(yù)存程序、和觸發(fā)程序這三類物件與其資料來源物件(資料表、檢視表、或預(yù)存程序)之間的依存關(guān)係,以及在其定義中所含的其它物件。不過此表列出的都是數(shù)字性的識(shí)別碼等資訊,不太適合我們查詢,如果想查看文字性的資訊,可使用系統(tǒng)預(yù)存程序sp_depends。sys.sql_modules:列出資料庫中所有檢視表、觸發(fā)程序、預(yù)存程序、和規(guī)則等物件的資訊,如果您查詢這個(gè)檢視表的內(nèi)容,可在其中的definition欄看到上列物件的原始SQL語法定義。不過請(qǐng)勿自行手動(dòng)更動(dòng)這些內(nèi)容,因?yàn)槿绱丝赡軙?huì)使您的檢視表或預(yù)存程序等物件失效。24與資料庫資訊相關(guān)的目錄檢視表sys.types:檢視系統(tǒng)內(nèi)建型別和在這個(gè)資料庫中所建立的使用者自訂型別,包括型別的名稱、是否為nullable
、及其長(zhǎng)度等各項(xiàng)資訊。25與系統(tǒng)資訊相關(guān)的檢視表除了前述的目錄檢視表外,另外還有許多特別的系統(tǒng)檢視表,可用來查看與整個(gè)SQLServer系統(tǒng)相關(guān)的資訊,以下介紹其中幾個(gè)實(shí)用的檢視表。sys.backup_devices:可檢視已建立的備份裝置之相關(guān)資訊,包括裝置名稱、類型、路徑。26與系統(tǒng)資訊相關(guān)的檢視表sys.configurations:可檢視系統(tǒng)的組態(tài)資訊,建議您對(duì)master資料庫執(zhí)行一下"select*fromsys.configurations"敘述來看看SQLServer到底有哪些組態(tài)設(shè)定,如此可大致認(rèn)識(shí)一下我們能對(duì)SQLServer做什麼樣的調(diào)校。在傳回結(jié)果中,value_in_use
欄位表示的是『執(zhí)行中』的SQLServer所採(cǎi)用的設(shè)定值;若您正好更改了某項(xiàng)系統(tǒng)組態(tài),那麼這個(gè)新的且尚未生效的設(shè)定值則會(huì)顯示在values欄位,待下次重新啟動(dòng)SQLServer或執(zhí)行"RECONFIGURE"指令後,新的設(shè)定值才會(huì)生效。關(guān)於系統(tǒng)組態(tài)設(shè)定,請(qǐng)參見13-6節(jié)的介紹。27與系統(tǒng)資訊相關(guān)的檢視表sys.databases:檢視SQLServer中所有資料庫的資訊,包括資料庫的名稱、建立日期、目前所用的復(fù)原模式設(shè)定值等。sys.dm_tran_locks:列出目前已設(shè)定的所有鎖定(lock)資訊。sys.linked_logins:列出連上各連結(jié)伺服器(參見附錄B)所用的帳號(hào)設(shè)定。sys.master_files:檢視由SQLServer所管理的各項(xiàng)檔案資訊。sys.messages:列出SQLServer所有的錯(cuò)誤訊息(包括所有語言的版本)。28與系統(tǒng)資訊相關(guān)的檢視表sys.remote_logins:列出從遠(yuǎn)端SQLServer伺服器登入的使用者資訊。sys.servers:列出所有此SQLServer可存取的遠(yuǎn)端SQLServer伺服器(參見附錄B)。sys.server_principals:列出這個(gè)SQLServer所有的登入帳戶資訊,包括登入名稱、預(yù)設(shè)資料庫和語系等。sys.syscharsets:檢視SQLServer所支援的各種字元集和排序方式的資訊,也就是在第2章提過在重建系統(tǒng)資料庫時(shí)所用的定序參數(shù)值,例如id為196的記錄,代表的就是使用繁體中文字集(CodePage950)並使用二元排序方式。29其它系統(tǒng)檢視表為符合SQL-92標(biāo)準(zhǔn)的規(guī)範(fàn),SQLServer也提供另一組系統(tǒng)檢視表,稱為資訊結(jié)構(gòu)描述檢視表,它們都定義在INFORMATION_SCHEMA這個(gè)特別的結(jié)構(gòu)描述中。這些檢視表所傳回的內(nèi)容,其實(shí)都是透過前述的系統(tǒng)檢視表取得,至於屬於SQLServer
特有的(非SQL-92標(biāo)準(zhǔn))系統(tǒng)資訊,將無法透過資訊結(jié)構(gòu)描述檢視表取得。30其它系統(tǒng)檢視表例如查詢INFORMATION_SCHEMA.tables
會(huì)傳回資料庫中所有使用者資料表及檢視表的名稱、所屬結(jié)構(gòu)描述等簡(jiǎn)單資訊;而查詢sys.tables
雖然只會(huì)傳回使用者資料表的資訊,但資訊內(nèi)容還包括建立日期、修改日期、以及多項(xiàng)屬性的狀態(tài)等特殊的資訊。如果是開發(fā)應(yīng)用程式需存取SQLServer、Oracle、DB2等異質(zhì)資料庫,為求方便當(dāng)然是使用符合標(biāo)準(zhǔn)的INFORMATION_SCHEMA中的各個(gè)檢視表;但若是想得知較詳細(xì)的SQLServer系統(tǒng)資訊,則仍應(yīng)使用SQLServer的系統(tǒng)檢視表及目錄檢視表。314-3資料庫的規(guī)劃資料庫本身也是由SQLServer透過作業(yè)系統(tǒng),以檔案的形式存於磁碟之中。不過雖然檔案存於磁碟上的確切位置,或是實(shí)際的存取動(dòng)作,都是由作業(yè)系統(tǒng)在管理的,但SQLServer自己也對(duì)檔案的使用方式有一套完整的架構(gòu),我們可稱之為資料庫的實(shí)體架構(gòu)。32資料庫的規(guī)劃在建立新的資料庫時(shí),SQLServer預(yù)設(shè)就會(huì)建立兩個(gè)檔案供資料庫使用,而必要時(shí)我們也能建立新的檔案供現(xiàn)有的資料庫使用。這些檔案的規(guī)劃與管理,也是資料庫管理中的一項(xiàng)重要課題。以下就來看看SQLServer的檔案架構(gòu),以及我們?cè)诮①Y料庫時(shí)應(yīng)如何規(guī)劃其檔案的使用。關(guān)於如何建立新資料庫,相信大部分的讀者都已瞭解,此處就不再多做介紹。若想學(xué)習(xí)建立資料庫的基本方法,可參考本公司『MicrosoftSQLServer2008設(shè)計(jì)實(shí)務(wù)』一書的介紹。33檔案前面說過,在建立新資料庫時(shí),預(yù)設(shè)會(huì)建立兩個(gè)檔案,其中一個(gè)就是主要資料檔,另一個(gè)則是記錄所有對(duì)資料庫更新動(dòng)作的交易記錄檔。但資料庫可使用的檔案並不限於這兩者,在SQLServer中將資料庫使用的檔案分為三類:主要資料檔(Primarydatafile):每個(gè)資料庫都會(huì)有一個(gè)主要資料檔,而且也只會(huì)有一個(gè)。如果沒有特別的需求,在建立資料庫時(shí),使用SQLServer所提供的預(yù)設(shè)檔名做為主要資料檔的名稱就可以了。34檔案次要資料檔(Secondarydatafile):這種檔案預(yù)設(shè)是不會(huì)產(chǎn)生的,但是當(dāng)您希望讓SQLServer能將資料庫的資料存於主要資料檔以外的其它檔案時(shí),就可建立次要資料檔。次要資料檔的數(shù)量,原則上是沒什麼限制,也就是說您可為資料庫建立多個(gè)次要資料檔,讓資料分散存於各檔案中。35檔案交易記錄檔(logfile):交易記錄檔和主要資料檔一樣都是在建立資料庫時(shí)就會(huì)產(chǎn)生的,但是它也和次要資料庫檔一樣,我們可以為單一個(gè)資料庫設(shè)定多個(gè)交易記錄檔。交易記錄檔並不是用來記錄資料庫的資料內(nèi)容,而是記錄使用者對(duì)資料庫所做的各項(xiàng)異動(dòng),有了對(duì)資料庫內(nèi)容更改的完整記錄,當(dāng)SQLServer發(fā)生問題而導(dǎo)致資料庫內(nèi)容有誤時(shí),就能藉由交易記錄檔內(nèi)的資訊,來復(fù)原資料庫的資料了。36檔案由於在建立資料庫時(shí),就會(huì)先建好主要資料檔,若沒什麼特別需求的話,就可這樣一直用下去,也就是以主要資料檔為唯一存放資料庫的檔案。不過在一些較特別的情況下,您可能就需採(cǎi)取不同的檔案使用方式。例如在系統(tǒng)建立之初,磁碟的容量還足夠存放我們的資料庫,但經(jīng)過一段時(shí)後,磁碟空間不足而加裝新的磁碟,此時(shí)就可在新磁碟上建立次要資料檔,以便我們能繼續(xù)新增資料。37檔案再考慮另一個(gè)較複雜的例子,若資料庫的使用者眾多,查詢動(dòng)作也非常多,就檔案的使用面而言,有人就會(huì)想到將此檔案放在系統(tǒng)中速度較快的磁碟或RAID磁碟陣列上以提昇存取效率。但若此資料庫很大又只用到一個(gè)主要資料檔,可能會(huì)造成磁碟空間不足的問題,此時(shí)就應(yīng)及早替資料庫規(guī)劃出次要資料檔,並分散於不同的磁碟。38檔案而且要讓較常被用的資料庫物件(例如索引),存放在速度較快的硬碟上;如此不但讓速度較快的硬碟能物盡其用,也能使資料庫的存取效率有所提昇。不過我們並不能直接要求SQLServer將哪個(gè)資料表、索引放在指定的資料檔中,在建立資料表和索引的SQL敘述中,都只能用檔案群組來指定存放的位置,以下就來看如何使用檔案群組。39檔案群組當(dāng)我們?yōu)橘Y料庫設(shè)定了多個(gè)檔案時(shí),在檔案的配置和管理上將會(huì)變得較為複雜,因此SQLServer特別提供了檔案群組(filegroup)的機(jī)制,以方便我們管理資料庫的檔案。就如上一小節(jié)所述的,在SQLServer中,我們對(duì)於資料庫的檔案使用方式,是以檔案群組來指定,而不能以檔案來指定。40檔案群組檔案群組也是分為三種:主檔案群組(Primaryfilegroup):內(nèi)含主要資料檔的檔案群組,也就是在建立資料庫時(shí)預(yù)設(shè)就會(huì)產(chǎn)生的檔案群。若在為資料庫加入其它的次要資料檔時(shí),未特別指定檔案所屬的檔案群組,則預(yù)設(shè)這些檔案也都是放在主檔案群組中。通常系統(tǒng)資料表的內(nèi)容也都是放在主檔案群組的資料檔中。使用者定義檔案群組(User-definedfilegroup):凡是由我們自行建立的檔案群都屬於此類。41檔案群組預(yù)設(shè)檔案群組(Defaultfilegroup):預(yù)設(shè)檔案群組並不是指主檔案群組和使用者定義檔案群組以外的另一種檔案群組,而是指目前資料庫預(yù)設(shè)使用的檔案群組,在建立新的資料庫物件時(shí),若未指定要建立在哪一個(gè)檔案群組,則這些物件都會(huì)被放在預(yù)設(shè)檔案群組中。42檔案群組在沒有特別指定的情況下,因?yàn)轭A(yù)設(shè)檔案群組就是主檔案群組,所以資料庫大概都只會(huì)用到主檔案群組。但若您有建立使用者定義檔案群組,並想將之設(shè)定為預(yù)設(shè)檔案群組的話,可用如下的SQL語法:43檔案群組這樣隨後所建立的資料庫物件,就會(huì)放在您所指定的檔案群組之中了。下圖就是將MyData
資料庫中的Secondary檔案群組設(shè)為預(yù)設(shè)檔案群組的情形:44檔案群組除了直接更改預(yù)設(shè)檔案群組外,在CREATETABLE和CREATEDATABASE敘述中也都可用ON參數(shù)來設(shè)定要將資料表或資料庫放在哪個(gè)群組中,例如:45資料檔的大小資料庫中的資料是不時(shí)在更動(dòng)的,隨時(shí)都會(huì)有新增與刪除資料的情形。換句話說,資料檔實(shí)際使用的磁碟空間是經(jīng)常在變動(dòng)的,當(dāng)資料增加的量超過資料檔原有的可用空間時(shí),就需配置新的磁碟空間給資料檔使用。而資料庫異動(dòng)頻繁,若不斷進(jìn)行配置新磁碟空間的動(dòng)作,也是會(huì)影響到伺服器的效能。因此若能依據(jù)資料成長(zhǎng)情形,來設(shè)定資料檔使用磁碟空間的方式,將可減少不當(dāng)?shù)目臻g配置、對(duì)伺服器效能的負(fù)面影響、或是佔(zhàn)用多餘磁碟空間的情形。46資料檔的大小前面說過,新建資料庫時(shí)是以model資料庫為藍(lán)本,因此包括初始資料檔的設(shè)定也都是延用model資料庫的資料檔設(shè)定。例如預(yù)設(shè)model資料庫的資料檔大小為3MB、成長(zhǎng)時(shí)每次增加1MB、且無成長(zhǎng)的上限,所以新建資料庫時(shí)預(yù)設(shè)也是採(cǎi)用此項(xiàng)設(shè)定。當(dāng)然在新建資料庫時(shí)可自行更改此設(shè)定(或至model資料庫的屬性交談窗修改預(yù)設(shè)值)。47資料檔的大小48資料檔的大小上圖所示的就是預(yù)設(shè)的檔案成長(zhǎng)設(shè)定,其中自動(dòng)成長(zhǎng)這一欄就表示當(dāng)檔案空間不足時(shí),SQLServer就會(huì)自動(dòng)以指定的方式加大檔案。不過上圖中的這個(gè)預(yù)設(shè)值其實(shí)並不適用所有資料庫,以一個(gè)日後可能要容納數(shù)十萬、數(shù)百萬筆記錄的資料庫而言,可能需要數(shù)百M(fèi)B的空間來存放,若以一開始使用3MB的大小,然後每次增加個(gè)1MB,不難想見,這將會(huì)造成前面說過的配置磁碟空間的額外負(fù)擔(dān),而且也很容易造成檔案存放空間不連續(xù),對(duì)伺服器的效能會(huì)有不良的影響。49資料檔的大小不過若一開始就先配置太大的磁碟空間給檔案,也並非明智的做法,除了浪費(fèi)磁碟空間外,也會(huì)增加檔案處理的負(fù)擔(dān)。其中最嚴(yán)重的就是備份了,因?yàn)镾QLServer在備份資料庫時(shí),是將所有的資料檔都複製到備份裝置中,因此若一開始就建立了遠(yuǎn)超過所需磁碟空間的大檔案,以後在做備份時(shí)等於要備份大半的未用空間,不但浪費(fèi)時(shí)間也浪費(fèi)備份資源。50資料檔的大小因此比較好的作法就是先大略估計(jì)一下資料庫可能的大小,並據(jù)以配置適當(dāng)?shù)拇诺臻g給資料檔,然後設(shè)定合適的成長(zhǎng)方式以求在善用磁碟空間和維護(hù)存取效率之間達(dá)到平衡。至於資料庫需要多少的磁碟空間呢?由於資料庫中最主要的就是存放在各資料表中的資料,因此要估算資料庫的大小,就需先估算出資料庫中各資料表的大小。51資料表空間的估算由於SQLServer使用的是二維式的資料表,所以直覺上資料表大小就是記錄筆數(shù)乘上每一筆記錄的大小(即各欄位大小總和),但事實(shí)上卻非如此,因?yàn)槲覀兛赡軙?huì)用到非固定大小的欄位,另外SQLServer還會(huì)使用一些額外的空間做資料的管理。在SQLServer的線上叢書中已為我們提出一種可估算資料表空間的方式,由於詳細(xì)的計(jì)算內(nèi)容非常複雜,在此不做深入的介紹,有興趣者請(qǐng)參考SQLServer線上叢書的『估計(jì)資料庫的大小』主題。52檔案的成長(zhǎng)與縮減雖然我們可事先估算資料表所需的空間,據(jù)以設(shè)定合適的磁碟空間給資料檔。但除非要建立的資料表,其資料量是已經(jīng)固定不會(huì)再變動(dòng)的,否則一般情況下資料表所佔(zhàn)空間是隨著時(shí)間逐漸增加的。一方面我們很難準(zhǔn)確算出未來實(shí)際的資料量,二方面讓資料檔一開始就佔(zhàn)用太多暫時(shí)不會(huì)用到的空間也不太經(jīng)濟(jì),因此讓資料檔隨時(shí)間成長(zhǎng)仍是不可免的。所以我們?cè)倩仡^看看在建立檔案時(shí)的成長(zhǎng)參數(shù)設(shè)定。53檔案的成長(zhǎng)與縮減除了每次成長(zhǎng)的數(shù)量外,另一個(gè)要考慮的就是成長(zhǎng)的上限,也就是您允許這個(gè)資料庫最多佔(zhàn)用多少的磁碟空間。預(yù)設(shè)是不限制檔案成長(zhǎng),也就是只要有新的資料進(jìn)來,磁碟也還有可用空間,就繼續(xù)配置新的磁碟空間給檔案。不過讓檔案無限制成長(zhǎng)並不一定是個(gè)好的做法,必要時(shí)也可設(shè)定個(gè)上限,以免檔案佔(zhàn)用大半的磁碟空間,而影響其它程式或資料庫的使用。54檔案的成長(zhǎng)與縮減例如有人會(huì)將檔案大小上限設(shè)為初始大小的兩、三倍,設(shè)若一開始資料檔大小設(shè)為100MB,就可將其上限設(shè)為200或300MB。SQLServer2008資料檔大小的理論上限為16TB;交易記錄檔則為2TB。55手動(dòng)加大檔案除了妥善設(shè)定檔案的成長(zhǎng)大小和成長(zhǎng)上限外,若想對(duì)檔案的大小做更嚴(yán)格的控制,就是取消檔案自動(dòng)成長(zhǎng)這個(gè)選項(xiàng),將檔案設(shè)為不會(huì)自動(dòng)成長(zhǎng),而在有需要時(shí)再自行用SQL語法或ManagementStudio來增加檔案大小。要用SQL語法增加檔案大小,可使用ALTERDATABASE敘述,例如以下敘述就是將Test資料庫中的Test資料檔設(shè)為10MB:56手動(dòng)加大檔案要注意的是,以ALTERDATABASE敘述修改檔案大小時(shí),將不受先前設(shè)定檔案大小上限的限制,例如原本Test.MDF(或NDF)檔的大小上限是8MB,則執(zhí)行上列的敘述仍能順利將檔案變成10MB,且檔案上限也會(huì)自動(dòng)調(diào)整為10MB。57檔案的縮減有成長(zhǎng)自然也有縮小,當(dāng)資料檔很大而且內(nèi)部的空間使用率很低時(shí),就應(yīng)設(shè)法移除未使用空間,以縮減檔案大小並釋放磁碟空間。在建立資料庫檔案時(shí)並無相關(guān)的設(shè)定,而預(yù)設(shè)也沒有自動(dòng)縮減的動(dòng)作,因此想要替檔案減肥,需自己手動(dòng)進(jìn)行。SQLServer提供2種縮減資料檔的方法,第一種是『壓縮資料庫』,另一種則是『壓縮檔案』。要壓縮資料庫,可於ManagementStudio中,在要處理的資料庫名稱上按滑鼠右鈕執(zhí)行『工作/壓縮/資料庫』命令,然後如下操作。58檔案的縮減59檔案的縮減壓縮後檔案的最大可用空間欄位是用來設(shè)定壓縮後的可用空間,不要超過我們指定的百分比(預(yù)設(shè)為0%),接著按確定鈕,就會(huì)開始減肥的動(dòng)作。使用上述的方法,是針對(duì)資料庫壓縮,至於要如何壓縮各資料庫檔,則是由SQLServer自行判斷。如果您想自訂單一檔案的壓縮方式,可改為執(zhí)行『工作/壓縮/檔案』命令,此時(shí)會(huì)出現(xiàn)如下的畫面。60檔案的
縮減61檔案的縮減除了使用ManagementStudio外,我們也可用DBCC這個(gè)特別的敘述來替檔案減肥,有關(guān)DBCC的使用請(qǐng)參見附錄C。62記錄檔資訊的清除資料庫的異動(dòng)情形都會(huì)記錄在交易記錄檔中,以便資料庫有誤時(shí),才能能根據(jù)這些資訊來回復(fù)至正確的狀態(tài),因此交易記錄檔所記錄的資料也會(huì)隨時(shí)間而增加。交易記錄檔雖然也有檔案大小和成長(zhǎng)設(shè)定,不過通常它們比較不會(huì)有檔案不停地膨脹的問題。當(dāng)我們進(jìn)行交易記錄備份時(shí)(參見第8章),對(duì)於已確定完成的交易,因?yàn)椴辉傩枰山灰子涗泚砘貜?fù),所以這部分的記錄會(huì)自動(dòng)被移除,而空出的檔案空間就可繼續(xù)供新的交易記錄使用。因此我們比較不需擔(dān)心資料庫用了一陣子後記錄檔變太大,然後也要替它定期做減肥的工作。63記錄檔資訊的清除除了在備份時(shí)移除不用的記錄以空出空間外,在沒有做交易記錄備份的情形下,我們也可利用資料庫的簡(jiǎn)單復(fù)原模式,讓記錄檔能定期清除不必要的內(nèi)容,以防記錄檔空間過度膨脹。在簡(jiǎn)單復(fù)原模式下,當(dāng)資料庫發(fā)生檢查點(diǎn)(checkpoint)時(shí),SQLServer就會(huì)截?cái)?truncate)交易記錄檔中不需要的部分。64記錄檔資訊的清除檢查點(diǎn)會(huì)在以下幾種情況發(fā)生:當(dāng)我們以sp_dboption
系統(tǒng)預(yù)存程序更改資料庫設(shè)定時(shí),該資料庫就會(huì)發(fā)生檢查點(diǎn)。當(dāng)我們用各種方式停止SQLServer服務(wù)時(shí),所有的資料庫都會(huì)發(fā)生檢查點(diǎn)。執(zhí)行CHECKPOINT敘述或備份資料時(shí),目前資料庫就會(huì)發(fā)生檢查點(diǎn)。65壓縮資料表壓縮資料表(請(qǐng)注意此功能與4-17頁可移除未使用空間的『壓縮資料庫』是不同的功能)可以將資料表的內(nèi)容以演算法加以壓縮,以節(jié)省儲(chǔ)存空間。這是SQLServer2008新增的功能,而且僅限Enterprise和Developer版本才有此功能。雖然壓縮資料表會(huì)耗用部分CPU資源,但資料表壓縮之後可減少磁碟IO,所以存取資料的效率會(huì)變快,可說是以少量CPU資源來換取磁碟空間與查詢效率。66壓縮資料表關(guān)於壓縮資料表的原理、壓縮的類型,以及如何評(píng)估壓縮效益,請(qǐng)參考旗標(biāo)出版的『MicrosoftSQLServer2008設(shè)計(jì)實(shí)務(wù)』,或參考SQLServer線上叢書的『建立壓縮資料表及索引』主題,以下僅簡(jiǎn)要說明壓縮資料表的操作步驟。請(qǐng)?jiān)贛anagementStudio中選擇要壓縮的資料表,按右鈕執(zhí)行『儲(chǔ)存體/管理壓縮』命令,略過歡迎畫面後,會(huì)出現(xiàn)如下的畫面。67壓縮資料表68壓縮資料表69使用rawpartition了解有關(guān)資料庫檔案的空間使用情況後,我們?cè)賮砜戳硪环N磁碟空間的使用。舊版的SQLServer支援一種稱做rawpartition的特別磁碟空間,所謂rawpartition是指已經(jīng)用磁碟管理工具分割出的磁碟分區(qū),但尚未被格式化(FORMAT),因此作業(yè)系統(tǒng)仍無法使用該磁碟空間。舊版的SQLServer不但支援將資料存放在rawpartition上面,甚至也可由rawpartition啟動(dòng)SQLServer。70使用rawpartition然而從SQLServer7.0起已經(jīng)不支援將SQLServer安裝在rawpartition上面,由rawpartition直接啟動(dòng),但仍支援將資料檔放在rawpartition的作法。使用rawpartition的好處,是當(dāng)資料庫讀寫頻繁到磁碟的I/O已經(jīng)成為效率的瓶頸時(shí),則使用rawpartition將可對(duì)I/O的效率有些微提昇。71使用rawpartition不過rawpartition較不值得推薦,因?yàn)樵谛侍釙N方面,它的助益並不太大,但卻有數(shù)項(xiàng)『小』缺點(diǎn),例如:rawpartition是作業(yè)系統(tǒng)無法使用的未格式化空間,所以平時(shí)可在作業(yè)系統(tǒng)下做的檔案處理,像是複製、搬移、和刪除檔案等操作,都不能使用。而同樣是透過作業(yè)系統(tǒng)的其它程式,像是備份軟體,也無法備份位於rawpartition中的檔案。每個(gè)rawpartition中只能有一個(gè)資料檔。72使用rawpartition使用rawpartition的步驟如下:先用磁碟管理工具建立新的分割區(qū),但不格式化。在CREATEDATABASE敘述中指定資料庫檔的存放路徑,是在前一步驟所建立的未格式化分割區(qū)上。例如若未格式化分割區(qū)的磁碟機(jī)代號(hào)是E、F,則可用如下的敘述。73使用rawpartition744-4SQLServer資料庫的實(shí)體結(jié)構(gòu)在第1章曾提過,SQLServer在儲(chǔ)存空間的管理上,是利用Page和Extent這兩種單位配置空間給資料庫。換言之,我們建立資料庫時(shí)所建立的資料檔內(nèi)部,就是利用page和extent為單位來存放資料表和索引等各種物件。本節(jié)就再深入一點(diǎn),來看看在存放資料時(shí),究竟是如何使用這兩種單位。75PagePage(頁)是最基本的儲(chǔ)存單位,每個(gè)Page的大小為8K位元組。當(dāng)我們?cè)诳盏馁Y料表中寫入一筆記錄時(shí),不管記錄只有30或100位元組,這時(shí)SQLServer一定是配置一個(gè)page給資料表。至於沒用到的部分,當(dāng)然就是保留以供存放新加入的記錄。每個(gè)page中的記錄都是『完整』的,也就是說不會(huì)發(fā)生此頁存放前幾個(gè)欄位,後幾個(gè)欄位存在下一頁。76Page因此SQLServer並非在page空間完全用完時(shí)才配置新的page,而是當(dāng)page所餘空間不足存放一筆完整的記錄時(shí),SQLServer就會(huì)再配置另一頁給資料表存放資料。雖然page的大小是8K,但在其開頭有個(gè)96位元組大小的pageheader,用來記錄此頁的相關(guān)資訊,因此可存放資料的部分只剩下8096位元組(=8192-96)。77Page此外,每存放一筆記錄時(shí),在頁尾都會(huì)再用掉2個(gè)位元組存放代表記錄位置的rowoffset,再加上其它的資訊,因此實(shí)際上可用來存放資料的空間,最多只有8060位元組。pageheader、記錄、
和rowoffset的存放
情形如右圖所示:78大型資料欄位及可變動(dòng)欄位當(dāng)記錄中包含text、ntext
、image、nvarchar(max)、varchar(max)、varbinary(max)、xml等大型欄位,或是varchar
、nvarchar
、varbinary
、sql_variant
等可變動(dòng)欄位時(shí),SQLServer會(huì)以不同的方式來儲(chǔ)存。79大型物件欄位對(duì)於text、ntext、image這3種大型物件欄位(統(tǒng)稱為L(zhǎng)OB,LargeObject),在預(yù)設(shè)的情況下會(huì)另外存於專屬的page中,且當(dāng)資料量較大時(shí),還會(huì)被切割分散存到不同的page。此時(shí)各筆記錄的資料頁中,將會(huì)存放一個(gè)指向『根節(jié)點(diǎn)』的指標(biāo)(pointer),而根節(jié)點(diǎn)則記錄了LOB實(shí)際存放的結(jié)構(gòu)與位置,如下圖所示。80大型物件欄位81大型物件欄位上圖所示的是一般的情況,然而若text、ntext、或image的資料很少或很大時(shí),存放的情況又會(huì)有些變化:若資料量小於64位元組,則資料會(huì)直接存於根節(jié)點(diǎn)結(jié)構(gòu)中。若資料量超過32KB,表示資料會(huì)被切割成相當(dāng)多塊以存於不同的page中,此時(shí)SQLServer會(huì)再於根節(jié)點(diǎn)下建立中間的節(jié)點(diǎn),根節(jié)點(diǎn)不直接指向資料區(qū)塊,而指向這些中間節(jié)點(diǎn),中間節(jié)點(diǎn)再指向資料區(qū)塊。82大型物件欄位由此可見,在SQLServer中存取text、ntext、和image之類的資料,其效率會(huì)比存取一般資料還差。因?yàn)榇嫒∫话阗Y料時(shí),讀取到資料頁就可存取到了,但存取text、ntext、和image資料時(shí),要先到資料頁中找出該欄位的根節(jié)點(diǎn)位置,再由根節(jié)點(diǎn)找出資料實(shí)際存放的位置,最後才能讀出資料。83小型與大型的可變動(dòng)欄位如果是varchar、nvarchar、varbinary、sql_variant
等可變長(zhǎng)度的資料欄位,或是nvarchar(max)、varchar(max)、varbinary(max)、xml等大型資料欄位,SQLServer預(yù)設(shè)會(huì)將它們存於資料頁中。但若該欄位本身超過8000位元組、或是該欄位資料過多導(dǎo)致整筆記錄超過8060位元組時(shí),SQLServer就會(huì)將上列欄位的資料移出,同樣是存於專用來存放varchar、nvarchar、varbinary、sql_variant
等欄位的頁面中,然後在原記錄中留下指向資料實(shí)際資料存放位置的指標(biāo)。84小型與大型的可變動(dòng)欄位此外,若後來修改資料時(shí)使該欄位又未超過8000位元組、且整該筆記錄的總長(zhǎng)度小於8060位元組時(shí),SQLServer也會(huì)自動(dòng)將這些可變動(dòng)欄位的資料移回資料頁中存放。85改變欄位的儲(chǔ)存行為上述將大型資料欄位及變動(dòng)資料欄位移出資料頁的作法,都是SQLServer的預(yù)設(shè)值。我們可用系統(tǒng)預(yù)存程序sp_tableoption
來修改之,其語法如下:以設(shè)定LOB資料存放方式而言,參數(shù)名稱為'textinrow',參數(shù)值可為'ON'、'OFF'(預(yù)設(shè)值)、0、或24到7000之間的整數(shù)。86改變欄位的儲(chǔ)存行為當(dāng)我們以sp_tableoption
設(shè)定了'textinrow'選項(xiàng)時(shí),並非所有的text、ntext、和image型別資料都是放在資料頁中(inrow),必須符合以下兩個(gè)條件,這類資料才會(huì)存於資料頁:資料量小於使用sp_tableoption
時(shí)所指定的參數(shù)值。例如設(shè)為1024的話,則只有小於1024位元組的text、ntext、或image資料才會(huì)放在資料表的資料頁中。如果參數(shù)值為'ON',則大小上限預(yù)設(shè)為256位元組。資料頁中有足夠的空間存放整筆記錄。87改變欄位的儲(chǔ)存行為不符合以上條件的話,資料仍是另存於text、ntext、和image專用的page中,但根節(jié)點(diǎn)指位器卻是存於資料頁的記錄中,因此仍較沒有啟用'textinrow'選項(xiàng)時(shí),有較佳的存取效能。而設(shè)定大型資料欄位(可變動(dòng)欄位的max版及xml)存放方式的選項(xiàng)則是'largevaluetypesoutofrow',其預(yù)設(shè)值為0(或'OFF')。若改設(shè)為1(或'ON'),則就算欄位長(zhǎng)度小於8000位元組,SQLServer也一律將nvarchar(max),varbinary(max)及xml欄位的資料移出存到專屬的頁面中。88Extent當(dāng)資料表需要空間存放資料時(shí),SQLServer是以page為單位提供給資料表。但是當(dāng)資料庫需要空間來存放資料表、索引時(shí),SQLServer是以相當(dāng)於8頁大小的Extent配置空間給資料庫。之所以要一次就配置64KB的儲(chǔ)存空間,主要是為了效能的考量,否則資料表不斷地成長(zhǎng),要一直重複配置空間的動(dòng)作,對(duì)SQLServer的運(yùn)作會(huì)有負(fù)面的影響。89ExtentExtent可依其內(nèi)的page內(nèi)容分為兩種:Mixedextent:這類extent中的page是由不同的物件所使用,例如某兩頁是由A資料表使用、有一頁是給索引B使用...。當(dāng)我們建立新的資料表和索引時(shí),SQLServer就會(huì)尋找mixedextent中尚未使用的page來存放。Uniformextent:此類extent的頁次都完全由同一個(gè)資料庫物件所使用,當(dāng)mixedextent中的資料表和索引的大小成長(zhǎng)到8頁時(shí),它們就會(huì)被存放到專供它們自己使用的uniformextent中,以提高存取的效率。90資料檔的結(jié)構(gòu)在資料檔中除了被切割為page或extent以存放我們的資料外,在最開頭有幾個(gè)基本的資料結(jié)構(gòu):檔頭:佔(zhàn)用資料檔的第1頁,記錄關(guān)於檔案本身的資訊,此外在主資料檔及第1個(gè)交易記錄檔另有1頁稱為bootpage,記錄有關(guān)資料庫的資訊。PFS(PageFreeSpace)page:佔(zhàn)用檔案的第2頁,此頁的每1位元組分別代表這個(gè)檔案中某一頁是否已被佔(zhàn)用或剩餘空間大約還有多少,因此可記錄8000頁的使用狀態(tài)。檔案較大時(shí),每隔8000頁就會(huì)出現(xiàn)一個(gè)PFS頁。91資料檔的結(jié)構(gòu)GAM(GlobalAllocationMap):佔(zhàn)用檔案的第3頁,此頁的每1位元代表檔案中某個(gè)extent是否已被使用,所以可記錄64000個(gè)extent的使用狀態(tài)。換言之,每64000extent就會(huì)出現(xiàn)一頁GAM。SGAM(SharedGAM):佔(zhàn)用檔案的第4頁,此頁的每1位元代表檔案中某個(gè)extent是否為尚有剩餘空間的mixedextent,所以同樣可記錄64000個(gè)extent的使用狀態(tài),每64000extent就會(huì)出現(xiàn)一頁SGAM。92資料檔的結(jié)構(gòu)除此之外,在資料檔中還有另一種管理空間用的page,就是IAM(IndexAllocationMap),雖然名稱中有index,但其實(shí)它是用來記錄資料頁和索引頁使用extent的情形,而且每個(gè)資料表和索引物件都有各自的IAM。SQLServer會(huì)視需要來建立IAM,所以IAM在檔案中的位置及數(shù)量均非固定。93資料檔的結(jié)構(gòu)當(dāng)SQLServer需要配置新的檔案空間來存放新增的資料時(shí),會(huì)先到IAM看看該物件目前擁有哪些extent,並根據(jù)PFS中的記錄來找出仍有足夠空間存放新資料的page。如果物件擁有的extent中的page全都裝滿資料了,就要再配置新的extent給物件了。對(duì)SQLServer資料庫的實(shí)體結(jié)構(gòu)有初步認(rèn)識(shí)之後,相信您也能對(duì)SQLServer資料庫存取效率有相當(dāng)?shù)捏w認(rèn),下一節(jié)我們就來看對(duì)資料庫存取效率有重大影響的索引。944-5索引的結(jié)構(gòu)與運(yùn)作方式前一節(jié)在介紹資料表的儲(chǔ)存方式時(shí),是將記錄一筆筆地放在資料頁中,至於索引的話,存放的方式也相同,但在結(jié)構(gòu)上由於採(cǎi)用B-Tree的結(jié)構(gòu),所以索引的結(jié)構(gòu)比較複雜。本節(jié)就來介紹索引的存放結(jié)構(gòu),以及SQLServer使用索引的方式。對(duì)這兩個(gè)主題有基本的認(rèn)識(shí),在建立資料表時(shí),就知道應(yīng)如何建立索引才能有效提高查詢的效能,甚至也能瞭解如何設(shè)計(jì)索引,以提升各種不同查詢方式的效能。95索引的結(jié)構(gòu)資料頁中存放的是一筆筆的記錄,至於索引頁,存放的則是每一筆記錄中的索引欄位。例如有個(gè)學(xué)生資料表是用學(xué)號(hào)做為索引,則索引頁存放的就是每位學(xué)生的學(xué)號(hào)。所以我們可將建立索引的動(dòng)作,看成是將資料表中的索引欄位多複製了一份,不過這多的一份並不像存資料時(shí)一筆筆地存到資料頁一樣,而是採(cǎi)用B-Tree(平衡樹)的結(jié)構(gòu)存放起來。96索引的結(jié)構(gòu)B-Tree結(jié)構(gòu)最重要的特性之一,就是從根節(jié)點(diǎn)到任一個(gè)末節(jié)點(diǎn)的距離都是一樣的,因此採(cǎi)用這種索引結(jié)構(gòu),可以保證索引任一筆資料的效率都是一樣快。為了達(dá)到這樣的目的,B-Tree就採(cǎi)用了一種特殊的演算法將所有的節(jié)點(diǎn)"平衡"分佈在整個(gè)樹狀結(jié)構(gòu)中。以下就來看這種架構(gòu)下,叢集索引、非叢集索引與資料頁的關(guān)係。97B-tree結(jié)構(gòu)B-tree(Balancedtree;平衡樹)從rootnode開始將資料以左右平衡的方式排列,中間可以依實(shí)際需要而分成許多層,這種結(jié)構(gòu)非常適合於搜尋資料。以下即為B-tree的架構(gòu):98叢集索引建立叢集索引時(shí),資料表中的記錄會(huì)依索引欄位的值,依序排列存放。因此整個(gè)叢集索引的B-Tree
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 中醫(yī)護(hù)理學(xué)(第5版)課件 舌診
- 新能源技術(shù)太陽能光伏發(fā)電系統(tǒng)安裝手冊(cè)
- 企業(yè)人際溝通培訓(xùn)
- 雨水收集 規(guī)范
- 項(xiàng)目投資可行性報(bào)告報(bào)告完整版
- 美麗鄉(xiāng)村項(xiàng)目可行性研究報(bào)告
- 家居智能語音
- 農(nóng)業(yè)產(chǎn)業(yè)鏈管理手冊(cè)
- 市場(chǎng)調(diào)研報(bào)告細(xì)分行業(yè)統(tǒng)計(jì)表
- 能源產(chǎn)業(yè)項(xiàng)目進(jìn)度跟蹤表
- 2025年“才聚齊魯成就未來”山東省機(jī)場(chǎng)管理集團(tuán)濟(jì)南國(guó)際機(jī)場(chǎng)股份限公司校園招聘8人自考難、易點(diǎn)模擬試卷(共500題附帶答案詳解)
- 2025年皖西衛(wèi)生職業(yè)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫及答案1套
- 2025年四川省對(duì)口招生(旅游類)考試復(fù)習(xí)題(附答案)
- 種植辣椒500畝項(xiàng)目可行性研究報(bào)告建議書模板
- 醫(yī)院危險(xiǎn)化學(xué)品安全管理
- 2024年勞動(dòng)合同(30篇)
- 原生廣告行業(yè)可行性分析報(bào)告
- 新聞?dòng)浾呗殬I(yè)資格《新聞基礎(chǔ)知識(shí)》考試題庫(含答案)
- 《鐵路軌道維護(hù)》課件-道岔改道作業(yè)
- 湘教版地理八年級(jí)下冊(cè) 期末綜合測(cè)試卷(二)(含答案)
- 2024年上海市安全員B證(項(xiàng)目負(fù)責(zé)人)考試試題題庫
評(píng)論
0/150
提交評(píng)論