- 相關(guān)推薦
sql數(shù)據(jù)庫(kù)實(shí)訓(xùn)總結(jié)
sql數(shù)據(jù)庫(kù)實(shí)訓(xùn)總結(jié),SQL是Structured Query Language(結(jié)構(gòu)化查詢(xún)語(yǔ)言)的縮寫(xiě)。SQL是專(zhuān)為數(shù)據(jù)庫(kù)而建立的操作命令集,是一種功能齊全的數(shù)據(jù)庫(kù)語(yǔ)言。下面是小編分享的sql數(shù)據(jù)庫(kù)實(shí)訓(xùn)總結(jié),歡迎閱讀!
sql數(shù)據(jù)庫(kù)實(shí)訓(xùn)總結(jié)【1】
我在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ù)的表。
sqlserver 有兩種類(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查詢(xún)時(shí)候,
select m.member_no, m.firstname, m.region_nofrom dbo.member as mwhere m.firstname like 'k%' and m.region_no > 6 and m.member_no < 5000go sql server 會(huì)根據(jù)索引方式,優(yōu)化成下面方式來(lái)執(zhí)行。
select a.member_no,a.firstname,b.region_nofrom(select m.member_no, m.firstname from dbo.member as m where m.firstname like 'k%' and m.member_no < 5000) a , -- 這個(gè)查詢(xún)可以直接使用 memberfirstname 非聚集索引,而且這個(gè)非聚集索引覆蓋了所有查詢(xún)列-- 實(shí)際執(zhí)行時(shí),只需要 邏輯讀取 3 次
(select m.member_no, m.region_no from dbo.member as mwhere m.region_no > 6) b
-- 這個(gè)查詢(xún)可以直接使用 member_region_link 非聚集索引,而且這個(gè)非聚集索引覆蓋了所有查詢(xún)列-- 實(shí)際執(zhí)行時(shí),只需要 邏輯讀取 10 次
where a.member_no = b.member_no
不信,你可以看這兩個(gè)sql 的執(zhí)行計(jì)劃,以及邏輯讀信息,都是一樣的。
其實(shí)上面的sql,如果優(yōu)化成下面的方式,實(shí)際的邏輯讀消耗也是一樣的。
為何sql server 不會(huì)優(yōu)化成下面的方式。
是因?yàn)?and 操作符優(yōu)化的另外一個(gè)原則。
1/26 的數(shù)據(jù)和 1/6 的數(shù)據(jù)找交集的速度要比 1/52 的數(shù)據(jù)和 1/3 的數(shù)據(jù)找交集速度要慢。
select a.member_no,a.firstname,b.region_nofrom(select m.member_no, m.firstname from dbo.member as mwhere m.firstname like 'k%' -- 1/26 數(shù)據(jù)) a,
(select m.member_no, m.region_no from dbo.member as mwhere m.region_no > 6 and m.member_no < 5000-- 1/3 * 1/ 2 數(shù)據(jù)) bwhere a.member_no = b.member_no
當(dāng)然,我們要學(xué)習(xí)sql 如何優(yōu)化的話(huà),就會(huì)用到查詢(xún)語(yǔ)句中的一個(gè)功能,指定查詢(xún)使用哪個(gè)索引來(lái)進(jìn)行。
比如下面的查詢(xún)語(yǔ)句
select m.member_no, m.firstname, m.region_nofrom dbo.member as m with (index (0))where m.firstname like 'k%' and m.region_no > 6 and m.member_no < 5000go
select m.member_no, m.firstname, m.region_nofrom dbo.member as m with (index (1))where m.firstname like 'k%' and m.region_no > 6 and m.member_no < 5000goselect m.member_no, m.firstname, m.region_nofrom dbo.member as m with (index (membercovering3))where m.firstname like 'k%' and m.region_no > 6 and m.member_no < 5000goselect m.member_no, m.firstname, m.region_nofrom dbo.member as m with (index (memberfirstname, member_region_link))where m.firstname like 'k%' and m.region_no > 6 and m.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ì)于每一條查詢(xún)語(yǔ)句。
會(huì)根據(jù)實(shí)際索引情況(sysindexes 系統(tǒng)表中存儲(chǔ)這些信息),分析每種組合可能的成本。
然后選擇它認(rèn)為成本最小的一種。
作為它實(shí)際執(zhí)行的計(jì)劃。
成本代價(jià)計(jì)算的一個(gè)主要組成部分是邏輯i/o的數(shù)量,特別是對(duì)于單表的查詢(xún)。
and 操作要滿(mǎn)足所有條件,這樣,經(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)常查詢(xún)的字段上最好建立索引
不創(chuàng)建索引的列
很少在查詢(xún)中被引用
包含較少的惟一值
定義為 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 view or a partitioned table
聚集索引提高性能的方法,在前面幾篇博客中分別提到過(guò),下面只是一個(gè)簡(jiǎn)單的大綱,細(xì)節(jié)請(qǐng)參看前面幾篇博客。
何時(shí)創(chuàng)建聚集索引?
clustered index會(huì)提高大多數(shù)table的性能,尤其是當(dāng)它滿(mǎn)足以下條件時(shí):
獨(dú)特, 狹窄, 靜止: 最重要的條件
持續(xù)增長(zhǎng)的,最好是只向上增加。
例如:
identity
date, identity
guid (only when using newsequentialid() function)
聚集索引唯一性(獨(dú)特型的問(wèn)題)
由于聚集索引的b+樹(shù)結(jié)構(gòu)的葉子節(jié)點(diǎn)必須指向具體數(shù)據(jù)。
如果你要建立聚集索引的列不唯一,并且你指定的創(chuàng)建的聚集索引是非唯一的聚集索引,則會(huì)有以下情況:
如果未使用 unique 屬性創(chuàng)建聚集索引,數(shù)據(jù)庫(kù)引擎 將向表自動(dòng)添加一個(gè)四字節(jié) uniqueifier 列。
必要時(shí),數(shù)據(jù)庫(kù)引擎 將向行自動(dòng)添加一個(gè) uniqueifier 值,使每個(gè)鍵唯一。
此列和列值供內(nèi)部使用,用戶(hù)不能查看或訪問(wèn)。
sql數(shù)據(jù)庫(kù)實(shí)訓(xùn)總結(jié)【2】
實(shí)訓(xùn),就是把我們?cè)趯W(xué)校所學(xué)的理論知識(shí),運(yùn)用到客觀實(shí)際中去,是自己所學(xué)到的理論知識(shí)有用武之地,只學(xué)不實(shí)踐,那么所學(xué)的就等于零。
理論應(yīng)該與時(shí)間相結(jié)合。
另一方面,實(shí)踐卡可以為以后找工作打基礎(chǔ)。
通過(guò)這段時(shí)間的實(shí)習(xí),學(xué)到一些在學(xué)校里學(xué)不到的東西。
因?yàn)榄h(huán)境不同,接觸的人與事不同,從中學(xué)到的東西自然就不一樣。
要學(xué)會(huì)從實(shí)踐中學(xué)習(xí),從學(xué)習(xí)中時(shí)間。
而且中國(guó)的緊急飛速發(fā)展,在擁有越來(lái)越多的機(jī)會(huì)的同是,也有了更多的挑戰(zhàn)。
對(duì)于人才的要求就會(huì)越來(lái)越高,我們不只要學(xué)號(hào)學(xué)校所學(xué)到的知識(shí),好藥不斷充生活中,實(shí)踐中學(xué)其他知識(shí),不斷從各方面武裝自己,才能在競(jìng)爭(zhēng)中突出自己,表現(xiàn)自己。
短短兩個(gè)月的工作過(guò)程是我受益很大。
不僅讓我開(kāi)闊了眼界,最主要的是懂得了如何更好的為人處事。
第一要真誠(chéng):你可以偽裝自己的面孔,但絕不可以忽略真誠(chéng)的力量。
記得第一天來(lái)這里時(shí),心里不可避免的有些疑惑:不知道老板怎么樣,應(yīng)該去怎么做,要去感謝什么等等。
踏進(jìn)大門(mén)后,之間幾個(gè)陌生的人用莫名而疑惑的眼神看著我,我微笑和他們打招呼,尷尬的局面理科得到了緩解,大家都很友善的微笑歡迎我的到來(lái)。
從那天戚,我養(yǎng)成了一個(gè)習(xí)慣,每天早上見(jiàn)到他們都要微笑的說(shuō)聲好。
第二是激情與耐心:激情與耐心,就像火與冰,看是兩種完全不同的東西,卻能碰撞出最美麗的火法。
第三是主動(dòng)出擊:當(dāng)你可以選擇的時(shí)候,把主動(dòng)權(quán)握在自己手中,在實(shí)習(xí)旗艦,我會(huì)主動(dòng)的協(xié)同同事工作,主動(dòng)的做些力所能及的事,并會(huì)幾級(jí)的尋找合適的時(shí)間跟他們交流。
談生活學(xué)習(xí)以及未來(lái)的工作,通過(guò)這些我就同事們走的很近,在實(shí)習(xí)中,他們會(huì)教我怎么做事見(jiàn)什么樣的人說(shuō)什么樣的話(huà),使我覺(jué)得花的了很多收獲而且和他們相處的很愉快。
第四是感受到學(xué)校和社會(huì)的距離:在學(xué)校,只有學(xué)習(xí)的氛圍,畢竟學(xué)校是學(xué)習(xí)的場(chǎng)所,每一個(gè)學(xué)生都在為取得更高的成績(jī)而努力。
在這里是工作的場(chǎng)所,每個(gè)人都會(huì)為了獲得更多的報(bào)酬而努力,無(wú)論是學(xué)習(xí)還是工作,都存在著競(jìng)爭(zhēng),在競(jìng)爭(zhēng)中就要不斷學(xué)習(xí)別人先進(jìn)的地方,也要不斷學(xué)習(xí)別人怎么做人,,移提高自己的能力。
記得老師曾經(jīng)說(shuō)過(guò)大學(xué)是一個(gè)小社會(huì),但我總覺(jué)得校園里總少不了那份純真,那份真誠(chéng),盡管是學(xué)學(xué)搞笑,學(xué)生還終歸保持著學(xué)生的身份,而走進(jìn)企業(yè),接觸各個(gè)的客戶(hù),同事,上司等等,關(guān)系復(fù)雜。
得去面對(duì)從未面對(duì)過(guò)的一切。
在實(shí)際工作中,可能會(huì)遇到書(shū)本上沒(méi)學(xué)到的,又可能是書(shū)本上的只是一點(diǎn)都用不上的情況。
或許工作中運(yùn)用到的只是很簡(jiǎn)單的問(wèn)題,只要套公式是的就能完成一線(xiàn)任務(wù),有時(shí)候我會(huì)埋怨,實(shí)際操作這么簡(jiǎn)單,但為什么書(shū)本上的知識(shí)讓人學(xué)的這么吃力呢?這是社會(huì)與學(xué)校脫軌了嗎?也許老是是正確的。
雖然大學(xué)生生活不像踏入社會(huì),但總算是社會(huì)的一部分,這是不可佛人的事實(shí)。
作為一個(gè)新世紀(jì)的大學(xué)生,應(yīng)該懂得與社會(huì)上各方面的人交往,處理社會(huì)所發(fā)生的各方面的事情,這就意味著大學(xué)生要注意到社會(huì)實(shí)踐,社會(huì)實(shí)踐必不可少。
畢竟,四年大學(xué)念完后,我已經(jīng)不再是一名大學(xué)生,是社會(huì)中的一份子了。
要與社會(huì)交流。
為社會(huì)做貢獻(xiàn)。
只懂得紙上談兵是遠(yuǎn)遠(yuǎn)不及的,以后的人生旅途是漫長(zhǎng)的,為了鍛煉自己成為一名合格,對(duì)社會(huì)有用的人才,多接觸社會(huì)是很有必要的。
回顧實(shí)訓(xùn)生活,感觸是很深,收獲是豐碩的。
在短暫的實(shí)訓(xùn)過(guò)程中,我深深的感覺(jué)到自己所學(xué)的知識(shí)的膚淺和在實(shí)踐運(yùn)用中知識(shí)的匱乏,剛開(kāi)始的一段時(shí)間里,對(duì)一些工作無(wú)從下手,茫然不知所措,這讓我感到非常的難過(guò)。
在學(xué)校總以為自己學(xué)的不錯(cuò),一旦接觸到時(shí)間,菜發(fā)現(xiàn)自己知道的是多么少,這是菜真正領(lǐng)悟到學(xué)無(wú)止境的含義。
sql數(shù)據(jù)庫(kù)實(shí)訓(xùn)總結(jié)【3】
為期一周的實(shí)訓(xùn)已經(jīng)結(jié)束,從這一周中,有了很多的感悟。
從學(xué)到和掌握到的東西來(lái)說(shuō),在書(shū)本上學(xué)到的東西非常不牢固,然而實(shí)訓(xùn)真的讓我受益匪淺!實(shí)訓(xùn)第一天到教室時(shí),看到老師給我們講試訓(xùn)的內(nèi)容與要求,然后告訴我們一些要完成的任務(wù)與作業(yè),然后根據(jù)試訓(xùn)的內(nèi)容與要求授課,讓我們從實(shí)踐中去體會(huì)所學(xué)的知識(shí)。
說(shuō)實(shí)話(huà),對(duì)于SQL Server 數(shù)據(jù)庫(kù),我所學(xué)到的知識(shí)很不牢固,當(dāng)時(shí)在課堂上聽(tīng)課所記住的也并不多,所以在試訓(xùn)開(kāi)始時(shí),真的不知道該干些什么?有一種“何去何從”的感覺(jué)!但隨著老師的教課和講解,以及和同學(xué)的討論,再結(jié)合自己所知道的知識(shí)和老師所發(fā)放下的課程內(nèi)容,根據(jù)這些實(shí)際的情況,我對(duì)自己將要做的事也有了興趣和信心。
所以在接下來(lái)的時(shí)間中,我們?cè)诶蠋煹膸椭麻_(kāi)始了數(shù)據(jù)庫(kù)相關(guān)的實(shí)訓(xùn)。
在這次的google訂餐系統(tǒng)的設(shè)計(jì)過(guò)程中,我們根據(jù)該google訂餐系統(tǒng)的功能,將其分解三大部分來(lái)完成,第一部分就是建立數(shù)據(jù)庫(kù)和表,并給其添加約束;第二是角色的管理,分為管理員,訂餐用戶(hù)和餐館;第三就是用編程語(yǔ)言建立管理菜單。
所以 試訓(xùn)的內(nèi)容是從數(shù)據(jù)庫(kù)和數(shù)據(jù)表的創(chuàng)建和修改開(kāi)始的,表是建立關(guān)系數(shù)據(jù)庫(kù)的基本結(jié)構(gòu),用來(lái)存儲(chǔ)數(shù)據(jù)具有已定義的屬性,在表的操作過(guò)程中,有查看表屬性,有查看表信息,修改表中數(shù)據(jù),刪除表中的數(shù)據(jù)以及修改表與刪除表的操作。
我們以SQL Server數(shù)據(jù)庫(kù)為基礎(chǔ),建立一個(gè)google訂餐系統(tǒng)的數(shù)據(jù)庫(kù)管理體系,并將數(shù)據(jù)庫(kù)與程序連接,用編程語(yǔ)言建立數(shù)據(jù)庫(kù)管理菜單。
老師給我們講了庫(kù)和表的創(chuàng)建方法,以及約束的內(nèi)心及其語(yǔ)法結(jié)構(gòu),讓我們知道了不同約束的功能和使用的環(huán)境,還給我們說(shuō)了標(biāo)識(shí)列的使用和作用。
講了數(shù)據(jù)庫(kù)的操作,增刪改查。
使我們掌握了insert into,deleted from,update set,以及select*from語(yǔ)句的的相關(guān)知識(shí)和運(yùn)用。
其中還學(xué)到了分頁(yè)查詢(xún)以及多表查詢(xún)。
從這次試訓(xùn)中讓我們更明白了一些知識(shí),表是數(shù)據(jù)庫(kù)最重要的一個(gè)數(shù)據(jù)對(duì)象,表的創(chuàng)建好壞直接關(guān)系到數(shù)據(jù)庫(kù)的成敗,表的內(nèi)容是越具體越好,但是也不能太繁瑣,以后在實(shí)際運(yùn)用中使用多表,對(duì)表的規(guī)劃和理解就會(huì)越深刻。
通過(guò)這次試訓(xùn),讓我深刻的了解到自己的不足,要想對(duì)進(jìn)行數(shù)據(jù)庫(kù)更深的學(xué)習(xí),自己得要多看有關(guān)的課外書(shū)籍,并多做練習(xí),不懂得要多問(wèn)同學(xué)和請(qǐng)教老師,以解決自己遇到的難題,知道更多的知識(shí)。
實(shí)訓(xùn)不僅是讓我們?cè)趯?shí)踐中對(duì)理論知識(shí)的驗(yàn)證,也讓我們知道我們多學(xué)的知識(shí)在社會(huì)上的運(yùn)用,把所學(xué)知識(shí)和企業(yè)商業(yè)接軌。
這次實(shí)訓(xùn),不僅讓我們學(xué)到了許多有關(guān)數(shù)據(jù)庫(kù)的知識(shí),老師也給我們講了很多社會(huì)現(xiàn)狀和就業(yè)情況,讓我們不同的角度了解這個(gè)專(zhuān)業(yè)的就業(yè)趨勢(shì)。
讓我們?cè)诮窈蟮膶W(xué)習(xí)中更有動(dòng)力的充實(shí)自己,曾加自己的知識(shí)面和鍛煉自己各方面能力。
【sql數(shù)據(jù)庫(kù)實(shí)訓(xùn)總結(jié)】相關(guān)文章:
SQL實(shí)訓(xùn)報(bào)告(通用5篇)05-26
數(shù)據(jù)庫(kù)實(shí)訓(xùn)心得體會(huì)04-23
數(shù)據(jù)庫(kù)實(shí)訓(xùn)心得體會(huì)(精選10篇)11-23
數(shù)據(jù)庫(kù)實(shí)訓(xùn)心得體會(huì)(精選13篇)12-12
金工實(shí)訓(xùn)課程的實(shí)訓(xùn)總結(jié)通用12-06