SQL Server 2008數(shù)據(jù)庫學(xué)習(xí)筆記
近幾年來,SQL Server 2008數(shù)據(jù)庫由于其操作簡(jiǎn)單、功能強(qiáng)大已經(jīng)被越來越多的人使用。對(duì)于初學(xué)者來說,學(xué)習(xí)SQL Server 2008時(shí)會(huì)或多或少的存在一些困惑,本文我們總結(jié)了一些SQL Server 2008數(shù)據(jù)庫的一些知識(shí),希望能夠?qū)δ兴鶐椭?/p>
SQL SERVER數(shù)據(jù)存儲(chǔ)體系結(jié)構(gòu)
SQL SERVER 把數(shù)據(jù)存儲(chǔ)在磁盤上,但為了提高性能和完整性,它優(yōu)化了磁盤結(jié)構(gòu)的格式,磁盤上的數(shù)據(jù)是最近一次由內(nèi)存刷新到磁盤上的狀態(tài).內(nèi)存數(shù)據(jù)是最新的,數(shù)據(jù)修改一般是先在內(nèi)存中進(jìn)行,而不是直接寫入到磁盤.
物理數(shù)據(jù)結(jié)構(gòu)
一個(gè)數(shù)據(jù)庫至少有一個(gè)數(shù)據(jù)文件與事務(wù)日志文件.
數(shù)據(jù)文件存儲(chǔ)數(shù)據(jù)庫的所有信息,包括數(shù)據(jù)值,索引和配置數(shù)據(jù)和可編程對(duì)象.事務(wù)日志文件提供一個(gè)對(duì)數(shù)據(jù)庫所有修改的持久記錄.SQL Server采用預(yù)寫的修改過程,即所有的修改在寫入數(shù)據(jù)庫之前都必須先寫進(jìn)事務(wù)日志.這些日志使各種數(shù)據(jù)恢復(fù)和完整性功能得以實(shí)現(xiàn)。
8k的塊來組織,稱為頁面.8個(gè)頁面又被組織為區(qū).
數(shù)據(jù)頁面:數(shù)據(jù)頁面存儲(chǔ)所有的數(shù)據(jù)值,但不包含那些大值類型,如text,ntext,xml,varchar(max).
索引頁面:存儲(chǔ)聚集索引條目和非聚集索引條目.
大型對(duì)象頁面:由于SQL Server數(shù)據(jù)行不能跨越頁面,所以大型數(shù)據(jù)值必須通過指針放到其他地方,指向存放數(shù)據(jù)條目的大型數(shù)據(jù)頁面.Varchar類似的類型會(huì)根據(jù)大小動(dòng)態(tài)地在數(shù)據(jù)頁面與大型對(duì)象頁面轉(zhuǎn)換.
其他頁面:GAM SGAM PFS等,存儲(chǔ)頁與區(qū)分配使用情況的頁面.
SGAM專門監(jiān)控混合區(qū),用一位來標(biāo)識(shí)混合區(qū)是否還有空閑頁面.
內(nèi)存體系結(jié)構(gòu)
存儲(chǔ)數(shù)據(jù)的內(nèi)存組織結(jié)構(gòu),也叫數(shù)據(jù)緩存或緩沖緩存.類似于物理磁盤的組織結(jié)構(gòu),內(nèi)存組織成8KB單元大小的緩沖池來存儲(chǔ)數(shù)據(jù)頁面.
客戶端工作站向SQL Server提交一個(gè)查詢,首先解析優(yōu)化查詢,并編譯成數(shù)據(jù)引擎可遵循的查詢計(jì)劃,嘗試定位到內(nèi)存緩沖區(qū)中的頁,提取必須的數(shù)據(jù)值,然后以一個(gè)表格式數(shù)據(jù)流(TDS)返回給客戶端,如果不在緩沖區(qū)中,則會(huì)產(chǎn)生一個(gè)I/O請(qǐng)求去磁盤讀取一個(gè)頁面到內(nèi)存中.
內(nèi)存緩沖區(qū)有三種狀態(tài):空閑,可用與臟的.
需要明白的是SQL Server的IO,都是通過WINDOWS來執(zhí)行的,所有的硬件也是通過windows來管理的,SQL Server通過OS來處理,本身不直接管理.
表分區(qū)
1.創(chuàng)建分區(qū)函數(shù)
- CREATE PARTITION FUNCTION DATEPARTITION(DATETIME)
- AS RANGE RIGHT
- FOR VALUES ('01/01/2007','01/01/2008')
這個(gè)示例分了三個(gè)區(qū),一個(gè)是2007/01/01之前的數(shù)據(jù),不包含這一天.然后是2007/01/01到2008/01/01(不包含)之間的數(shù)據(jù),然后是2008/01/01及其以后的數(shù)據(jù)。
2.創(chuàng)建分區(qū)方案
- CREATE PARTITION SCHEME dateScheme
- AS PARTITION DATEPARTITION
- TO ([FG1],[FG2],[PRIMARY])
- GO
分區(qū)方案末端的文件組表示分區(qū)將放置在哪里.
3.創(chuàng)建分區(qū)表
- CREATE TABLE partitiontable
- (id INT NOT NULL IDENTITY(1,1),
- datevalue DATETIME NOT NULL)
- ON dateScheme(DATEVALUE)
插入測(cè)試數(shù)據(jù)后并查看
- INSERT INTO partitiontable (datevalue) VALUES('2006-6-6 12:00:00')
- INSERT INTO partitiontable (datevalue) VALUES('2007-6-6 12:00:00')
- INSERT INTO partitiontable (datevalue) VALUES('2008-6-6 12:00:00')
查看:
- SELECT
- partition_id,
- PARTITION_number,
- ROWS
- FROM sys.partitions
- WHERE object_idobject_id=object_id('partitiontable')
面向查詢索引的索引策略
表的存儲(chǔ)HOBT,根據(jù)是否有索引來決定。
在堆中查詢數(shù)據(jù)的基本方式是執(zhí)行全表掃描,表是基于數(shù)據(jù)頁存儲(chǔ)的,因此表掃描就是對(duì)掃描存儲(chǔ)該表的數(shù)據(jù)頁,并從中提取所需的數(shù)據(jù)。這表明堆上進(jìn)行數(shù)據(jù)查詢的I/O開銷應(yīng)該與對(duì)應(yīng)的數(shù)據(jù)頁數(shù)基本相當(dāng)。
我們應(yīng)該創(chuàng)建什么樣的索引呢?創(chuàng)建查詢優(yōu)化器實(shí)際會(huì)使用的索引,創(chuàng)建能減少I/O的索引。
相對(duì)于響應(yīng)時(shí)間,優(yōu)化器更關(guān)注于吞吐量,優(yōu)化器使用靜態(tài)的統(tǒng)計(jì)數(shù)據(jù),必要時(shí)使用手動(dòng)更新,UPDATE STATISTICS即可刷新需要的統(tǒng)計(jì)頁。優(yōu)化器需要結(jié)構(gòu)良好的查詢。SQL SERVER 對(duì)每個(gè)表只使用一個(gè)索引(有例外)。
關(guān)于SQL Server 2008數(shù)據(jù)庫的知識(shí)就介紹到這里了,希望本次的介紹能夠?qū)δ兴斋@!
【編輯推薦】






