第一篇:數(shù)據(jù)庫(kù)實(shí)驗(yàn)心得
沒(méi)接觸數(shù)據(jù)庫(kù)的時(shí)候總是覺(jué)得它比較深?yuàn)W 或是不可接近的電腦知識(shí),盡管自己對(duì)電腦 非常感興趣,其實(shí)還是有些心理上的陌生 感。學(xué)習(xí)電腦就和我們平時(shí)的其它科目學(xué)習(xí) 一樣感覺(jué)它有永無(wú)止境的知識(shí),在這從初接 觸電腦時(shí)連個(gè)電腦的鍵盤(pán)都不敢動(dòng)到現(xiàn)在 連硬盤(pán)都也修理,其中的過(guò)程是多么長(zhǎng)啊, 數(shù)據(jù)庫(kù)是我在高中時(shí)候聽(tīng)過(guò),到了大學(xué)漸漸 了解了些,但就其原理性的內(nèi)容還不知道, 也就是根本就不清楚什么是數(shù)據(jù)庫(kù),只是知 道一個(gè)所謂的中國(guó)字典里的名詞。經(jīng)過(guò)此次 的課程設(shè)計(jì),我初步明白了數(shù)據(jù)庫(kù)的基本原 理。也已經(jīng)掌握了數(shù)據(jù)庫(kù)的基本知識(shí)。我想 對(duì)我以后的更深度學(xué)習(xí)打下了基礎(chǔ)。這次課 程設(shè)計(jì)讓我知道了讓 vb 連接 sql 的方法。 其實(shí)就是前臺(tái)和后臺(tái)的連接。有了這個(gè)思 想,我相信對(duì)以后是大有裨益的。
我按照系統(tǒng)工程軟件設(shè)計(jì)的要求,從需求分析,概念設(shè)計(jì),總體設(shè)計(jì),詳細(xì) 設(shè)計(jì),系統(tǒng)測(cè)試等各個(gè)步驟,分步完成系統(tǒng)的各項(xiàng)任務(wù),實(shí)現(xiàn)了系統(tǒng)中的學(xué)生信 息查詢,學(xué)生信息更新,學(xué)生信息添加等模塊的功能。 在這短短的五天里我收獲如下: 1、鞏固和加深了對(duì) c#的理解,提高綜合運(yùn)用本課程所學(xué)知識(shí)的能力。 2、培養(yǎng)了我選用參考書(shū),查閱手冊(cè)及文獻(xiàn)資料的能力。培養(yǎng)獨(dú)立思考,深 入研究,分析問(wèn)題、解決問(wèn)題的能力。 3、通過(guò)實(shí)際編譯系統(tǒng)的分析設(shè)計(jì)、編程調(diào)試,掌握應(yīng)用軟件的分析方法和 工程設(shè)計(jì)方法。 根據(jù)我在課程設(shè)計(jì)中遇到的問(wèn)題,我將在以后的學(xué)習(xí)當(dāng)中注意以下幾點(diǎn): 1、認(rèn)真上好專(zhuān)業(yè)實(shí)驗(yàn)課,多在實(shí)踐中鍛煉自己。 2、寫(xiě)程序的過(guò)程中要考慮周到,嚴(yán)密。 3、在做設(shè)計(jì)的時(shí)候要有信心,有耐心,切勿浮躁。 4、認(rèn)真的學(xué)習(xí)課本知識(shí),掌握課本中的知識(shí)點(diǎn),并在此基礎(chǔ)上學(xué)會(huì)靈活運(yùn) 用。 5、在課余時(shí)間里多寫(xiě)程序,熟練掌握在調(diào)試程序的過(guò)程中所遇到的常見(jiàn)錯(cuò) 誤,以便能節(jié)省調(diào)試程序的時(shí)間
第二篇:數(shù)據(jù)庫(kù)實(shí)驗(yàn)心得
我在sql server 索引基礎(chǔ)知識(shí)系列中,第一篇就講了記錄數(shù)據(jù)的基本格式。那里主要講解的是,數(shù)據(jù)庫(kù)的最小讀存單元:數(shù)據(jù)頁(yè)。一個(gè)數(shù)據(jù)頁(yè)是8k大小。
對(duì)于數(shù)據(jù)庫(kù)來(lái)說(shuō),它不會(huì)每次有一個(gè)數(shù)據(jù)頁(yè)變化后,就存到硬盤(pán)。而是變化達(dá)到一定數(shù)量級(jí)后才會(huì)作這個(gè)操作。 這時(shí)候,數(shù)據(jù)庫(kù)并不是以數(shù)據(jù)頁(yè)來(lái)作為操作單元,而是以64k的數(shù)據(jù)(8個(gè)數(shù)據(jù)頁(yè),一個(gè)區(qū))作為操作單元。
區(qū)是管理空間的基本單位。一個(gè)區(qū)是八個(gè)物理上連續(xù)的頁(yè)(即 64 kb)。這意味著 sql server 數(shù)據(jù)庫(kù)中每 mb 有 16 個(gè)區(qū)。
為了使空間分配更有效,sql server 不會(huì)將所有區(qū)分配給包含少量數(shù)據(jù)的表。sql server 有兩種類(lèi)型的區(qū):
統(tǒng)一區(qū),由單個(gè)對(duì)象所有。區(qū)中的所有 8 頁(yè)只能由所屬對(duì)象使用。
混合區(qū),最多可由八個(gè)對(duì)象共享。區(qū)中八頁(yè)的每頁(yè)可由不同的對(duì)象所有。
通常從混合區(qū)向新表或索引分配頁(yè)。當(dāng)表或索引增長(zhǎng)到 8 頁(yè)時(shí),將變成使用統(tǒng)一區(qū)進(jìn)行后續(xù)分配。如果對(duì)現(xiàn)有表創(chuàng)建索引,并且該表包含的行足以在索引中生成 8 頁(yè),則對(duì)該索引的所有分配都使用統(tǒng)一區(qū)進(jìn)行。
為何會(huì)這樣呢?
其實(shí)很簡(jiǎn)單:
讀或?qū)?8kb 的時(shí)間與讀或?qū)?64 kb的時(shí)間幾乎相同。
在 8 kb 到 64 kb 范圍之內(nèi),單個(gè)磁盤(pán) i/o 傳輸操作所花的時(shí)間主要是磁盤(pán)取數(shù)臂和讀/寫(xiě)磁頭運(yùn)動(dòng)的時(shí)間。
因此,從數(shù)學(xué)上來(lái)講,當(dāng)需要傳輸 64 kb 以上的 sql 數(shù)據(jù)時(shí),
盡可能地執(zhí)行 64 kb 磁盤(pán)傳輸是有益的,即分成數(shù)個(gè)64k的操作。
因?yàn)?64 kb 傳輸基本上與 8 kb 傳輸一樣快,而每次傳輸?shù)?sql server 數(shù)據(jù)是 8 kb 傳輸?shù)?8 倍。
我們通過(guò)一個(gè)實(shí)例來(lái)看 有and 操作符時(shí)候的最常見(jiàn)的一種情況。我們有下面一個(gè)表,
create table [dbo].[member]( [member_no] [dbo].[numeric_id] identity(1,1) not null, [lastname] [dbo].[shortstring] not null, [firstname] [dbo].[shortstring] not null, [middleinitial] [dbo].[letter] null, [street] [dbo].[shortstring] not null, [city] [dbo].[shortstring] not null, [state_prov] [dbo].[statecode] not null, [country] [dbo].[countrycode] not null, [mail_code] [dbo].[mailcode] not null, [phone_no] [dbo].[phonenumber] null, [photograph] [image] null, [issue_dt] [datetime] not null default (getdate()), [expr_dt] [datetime] not null default (dateadd(year,1,getdate())), [region_no] [dbo].[numeric_id] not null, [corp_no] [dbo].[numeric_id] null, [prev_balance] [money] null default (0), [curr_balance] [money] null default (0), [member_code] [dbo].[status_code] not null default (" "))
這個(gè)表具備下面的四個(gè)索引:
索引名 細(xì)節(jié) 索引的列
member_corporation_link nonclustered located on primary corp_no
member_ident clustered, unique, primary key located on primary member_no
member_region_link nonclustered located on primary region_no
memberfirstname nonclustered located on primary firstname
當(dāng)我們執(zhí)行下面的sql查詢時(shí)候,
select m.member_no, m.firstname, m.region_nofrom dbo.member as mm.weilaioem.comember_no < 5000) a , -- 這個(gè)查詢可以直接使用 memberfirstname 非聚集索引,而且這個(gè)非聚集索引覆蓋了所有查詢列-- 實(shí)際執(zhí)行時(shí),只需要 邏輯讀取 3 次
(select m.member_no, m.region_no from dbo.member as mm.weilaioem.comember_no, m.region_no from dbo.member as mm.weilaioem.comember_no
當(dāng)然,我們要學(xué)習(xí)sql 如何優(yōu)化的話,就會(huì)用到查詢語(yǔ)句中的一個(gè)功能,指定查詢使用哪個(gè)索引來(lái)進(jìn)行。
比如下面的查詢語(yǔ)句
select m.member_no, m.firstname, m.region_nofrom dbo.member as m m.weilaioem.com.member_no < 5000goselect m.member_no, m.firstname, m.region_nofrom dbo.member as m m.weilaioem.com.member_no < 5000go
這里 index 計(jì)算符可以是 0 ,1, 指定的一個(gè)或者多個(gè)索引名字。對(duì)于 0 ,1 的意義如下:
如果存在聚集索引,則 index(0) 強(qiáng)制執(zhí)行聚集索引掃描,index(1) 強(qiáng)制執(zhí)行聚集索引掃描或查找(使用性能最高的一種)。
如果不存在聚集索引,則 index(0) 強(qiáng)制執(zhí)行表掃描,index(1) 被解釋為錯(cuò)誤。
總結(jié)知識(shí)點(diǎn):
簡(jiǎn)單來(lái)說(shuō),我們可以這么理解:sql server 對(duì)于每一條查詢語(yǔ)句。會(huì)根據(jù)實(shí)際索引情況(sysindexes 系統(tǒng)表中存儲(chǔ)這些信息),分析每種組合可能的成本。然后選擇它認(rèn)為成本最小的一種。作為它實(shí)際執(zhí)行的計(jì)劃。
成本代價(jià)計(jì)算的一個(gè)主要組成部分是邏輯i/o的數(shù)量,特別是對(duì)于單表的查詢。
and 操作要滿足所有條件,這樣,經(jīng)常會(huì)要求對(duì)幾個(gè)數(shù)據(jù)集作交集。數(shù)據(jù)集越小,數(shù)據(jù)集的交集計(jì)算越節(jié)省成本。
的項(xiàng)目中,竟然出現(xiàn)了濫用聚集索引的問(wèn)題?磥(lái)沒(méi)有培訓(xùn)最最基礎(chǔ)的索引的意義,代價(jià),使用場(chǎng)景,是一個(gè)非常大的失誤。這篇博客就是從這個(gè)角度來(lái)羅列索引的基礎(chǔ)知識(shí)。
使用索引的意義
索引在數(shù)據(jù)庫(kù)中的作用類(lèi)似于目錄在書(shū)籍中的作用,用來(lái)提高查找信息的速度。
使用索引查找數(shù)據(jù),無(wú)需對(duì)整表進(jìn)行掃描,可以快速找到所需數(shù)據(jù)。
使用索引的代價(jià)
索引需要占用數(shù)據(jù)表以外的物理存儲(chǔ)空間。
創(chuàng)建索引和維護(hù)索引要花費(fèi)一定的時(shí)間。
當(dāng)對(duì)表進(jìn)行更新操作時(shí),索引需要被重建,這樣降低了數(shù)據(jù)的維護(hù)速度。
創(chuàng)建索引的列
主鍵
外鍵或在表聯(lián)接操作中經(jīng)常用到的列
在經(jīng)常查詢的字段上最好建立索引
不創(chuàng)建索引的列
很少在查詢中被引用
包含較少的惟一值
定義為 text、ntext 或者 image 數(shù)據(jù)類(lèi)型的列
heaps是staging data的很好選擇,當(dāng)它沒(méi)有任何index時(shí)
excellent for high performance data loading (parallel bulk load and parallel index creation after load)
excellent as a partition to a partitioned viem.weilaioem.com,
獨(dú)立完成,嚴(yán)禁抄
來(lái)源:網(wǎng)絡(luò)整理 免責(zé)聲明:本文僅限學(xué)習(xí)分享,如產(chǎn)生版權(quán)問(wèn)題,請(qǐng)聯(lián)系我們及時(shí)刪除。