版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、數(shù)據(jù)庫實(shí)驗(yàn)心得我在sql server索引基礎(chǔ)知識(shí)系列中,第一篇就講了記錄數(shù)據(jù)的基本格式。那里主要講解的是,數(shù)據(jù)庫的最小讀存單元:數(shù)據(jù)頁。一個(gè)數(shù)據(jù)頁是8k大小。對(duì)于數(shù)據(jù)庫來說,它不會(huì)每次有一個(gè)數(shù)據(jù)頁變化后,就存到硬盤。而是變 化達(dá)到一定數(shù)量級(jí)后才會(huì)作這個(gè)操作。這時(shí)候,數(shù)據(jù)庫并不是以數(shù)據(jù)頁來作為操作單元,而是以64k的數(shù)據(jù)(8個(gè)數(shù)據(jù)頁,一個(gè)區(qū))作為操作單元。區(qū)是管理空間的基本單位。一個(gè)區(qū)是八個(gè)物理上連續(xù)的頁(即64 kb)。這意味著sql server 數(shù)據(jù)庫中每 mb有16個(gè)區(qū)。為了使空間分配更有效,sql server不會(huì)將所有區(qū)分配給包含少量數(shù)據(jù)的 表。sql server 有兩種類型的區(qū)
2、:統(tǒng)一區(qū),由單個(gè)對(duì)象所有。區(qū)中的所有 8頁只能由所屬對(duì)象使用?;旌蠀^(qū),最多可由八個(gè)對(duì)象共享。區(qū)中八頁的每頁可由不同的對(duì)象所有。通常從混合區(qū)向新表或索引分配頁。當(dāng)表或索引增長到 8頁時(shí),將變成使用統(tǒng) 一區(qū)進(jìn)行后續(xù)分配。如果對(duì)現(xiàn)有表創(chuàng)建索引,并且該表包含的行足以在索引中生 成8頁,則對(duì)該索引的所有分配都使用統(tǒng)一區(qū)進(jìn)行。為何會(huì)這樣呢?其實(shí)很簡單:讀或?qū)?kb的時(shí)間與讀或?qū)?4 kb的時(shí)間幾乎相同。在8 kb到64 kb范圍之內(nèi),單個(gè)磁盤i/o傳輸操作所花的時(shí)間主要是磁盤取數(shù)臂和讀/寫磁頭運(yùn)動(dòng)的時(shí)間。因此,從數(shù)學(xué)上來講,當(dāng)需要傳輸 64 kb以上的sql數(shù)據(jù)時(shí),盡可能地執(zhí)行64 kb磁盤傳輸是有益的,
3、即分成數(shù)個(gè) 64k的操作。因?yàn)?4 kb傳輸基本上與8 kb傳輸一樣快,而每次傳輸?shù)膕ql server 數(shù)據(jù) 是8 kb傳輸?shù)?倍。我們通過一個(gè)實(shí)例來看有and操作符時(shí)候的最常見的一種情況。我們有下 面一個(gè)表,create table dbo.member( member_ no dbo. nu meric_ididen tity(1,1) not n ull, last name dbo.shortstri ng not n ull,firstnamedbo.shortstring not null,middleinitialdbo.letternuII, streetdbo.shorts
4、tringnot nuII,city dbo.shortstringnot nu II, state_ prov dbo.statecode not n ull, co un trydbo.co un trycode not nu II, mail_code dbo.mailcode not nu II,phone_no dbo. phonenu mber nu II, p hotogra ph image n ull,issue_dt datetime not null default (getdate(),expr_dt datetimenot null default (dateadd(
5、year,1,getdate(), regi on_nodbo. nu meric_id not nu II, cor p_no dbo. nu meric_id nu II,p rev_bala nee mon ey n ull default (0), curr_bala nee mon ey nulldefault (0), member_code dbo.status_code not null default ( )這個(gè)表具備下面的四個(gè)索引:索引名細(xì)節(jié)索引的列member_corporati on _li nk non clustered located on p rimary co
6、rp_nomember_ident clustered,unique, primary key located on primary member_nomember_regio n_li nk non clustered located on p rimary regi on_nomemberfirst name non clustered located on p rimary first name k% and _no > 6 and _no當(dāng)我們執(zhí)行下面的sql查詢時(shí)候,select _no, , _nofrom as mwhere like6) b-這個(gè)查詢可以直接使用 memb
7、er_region_link 非聚集索引,而且這個(gè)非 聚集索引覆蓋了所有查詢列-實(shí)際執(zhí)行時(shí),只需要 邏輯讀取10次where _no = _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ù)找交集速度要慢。'k%select _n o,_ no from(select _no, from as mwhere like 1/26 數(shù)據(jù))a,
8、(select _no, _no from as mwhere_no 6 and _no 6 and _no < 5000go_no > 6 and _no 6 and _no 6 and指定的一個(gè)或者多個(gè)索引名字。對(duì)于 0 ,這里index 計(jì)算符可以是0,1,1的意義如下:強(qiáng)制執(zhí)行聚集索引掃描,in dex(1)強(qiáng)制如果存在聚集索引,則in dex(0)執(zhí)行聚集索引掃描或查找(使用性能最高的一種)如果不存在聚集索引,則index(O) 強(qiáng)制執(zhí)行表掃描,index(1)被解釋為錯(cuò)誤。總結(jié)知識(shí)點(diǎn):簡單來說,我們可以這么理解:sql server對(duì)于每一條查詢語句。會(huì)根據(jù) 實(shí)際索引情
9、況(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)了濫用聚集索引的問題??磥頉]有培訓(xùn)最最基礎(chǔ)的索引的 意義,代價(jià),使用場景,是一個(gè)非常大的失誤。這篇博客就是從這個(gè)角度來羅列 索引的基礎(chǔ)知識(shí)。使用索引的意義索引在數(shù)據(jù)庫中的作用類似于目錄在書籍中的作用,用來提高查找信息的速度。使用索引查找數(shù)據(jù),無需對(duì)整表進(jìn)行掃描,可以快速找到所需
10、數(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ù)類型的列heaps是staging data 的很好選擇,當(dāng)它沒有任何index時(shí)excellent for high performanee data loading (parallel bulk load and p arallel in dex creati on
11、 after load) excelle nt as a p artiti on to a p artiti oned view or a p artiti oned table聚集索引提高性能的方法,在前面幾篇博客中分別提到過,下面只是一個(gè) 簡單的大綱,細(xì)節(jié)請(qǐng)參看前面幾篇博客。何時(shí)創(chuàng)建聚集索引?clustered index會(huì)提高大多數(shù)table的性能,尤其是當(dāng)它滿足以下條件時(shí):獨(dú)特,狹窄,靜止:最重要的條件 持續(xù)增長的,最好是只向上增加。例如:ide ntity date, ide ntity guid (on ly whe n using n ewseque ntialid() fun ctio n)聚集索引唯一性(獨(dú)特型的問題)由于聚集索引的b+樹
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 系統(tǒng)容錯(cuò)設(shè)計(jì)思路
- 世界名曲解讀課程
- 求職簡歷制作指導(dǎo)模板
- 二零二五版房產(chǎn)抵押購銷與房地產(chǎn)項(xiàng)目運(yùn)營管理合同3篇
- 二零二五年度旅游產(chǎn)品居間服務(wù)合同2篇
- 二零二五年度生物降解材料研發(fā)合作協(xié)議3篇
- 二零二五版兼職研發(fā)人員技術(shù)成果保密合同3篇
- 雅安職業(yè)技術(shù)學(xué)院《Python語言》2023-2024學(xué)年第一學(xué)期期末試卷
- 二零二五版公司向個(gè)人提供藝術(shù)品購買借款合同3篇
- 二零二五年度房地產(chǎn)法律法規(guī)咨詢居間服務(wù)合同6篇
- 細(xì)胞庫建設(shè)與標(biāo)準(zhǔn)制定-洞察分析
- 2024年國家公務(wù)員錄用考試公共基礎(chǔ)知識(shí)復(fù)習(xí)題庫2500題及答案
- DB3309T 98-2023 登步黃金瓜生產(chǎn)技術(shù)規(guī)程
- DBJ41-T 108-2011 鋼絲網(wǎng)架水泥膨脹珍珠巖夾芯板隔墻應(yīng)用技術(shù)規(guī)程
- 2025年學(xué)長引領(lǐng)的讀書會(huì)定期活動(dòng)合同
- 表內(nèi)乘除法口算l練習(xí)題1200道a4打印
- 《EICC培訓(xùn)講義》課件
- 2025年四川省政府直屬事業(yè)單位招聘管理單位筆試遴選500模擬題附帶答案詳解
- 2024年物業(yè)公司服務(wù)質(zhì)量保證合同條款
- 文言文閱讀之理解實(shí)詞含義(講義)-2025年中考語文專項(xiàng)復(fù)習(xí)
- JCT587-2012 玻璃纖維纏繞增強(qiáng)熱固性樹脂耐腐蝕立式貯罐
評(píng)論
0/150
提交評(píng)論