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