<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    靈魂-放水

    為學(xué)日益,為道日損。

    BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
      296 Posts :: 10 Stories :: 274 Comments :: 0 Trackbacks
    1 ? 邏輯數(shù)據(jù)庫和表的設(shè)計 ? ?
    ?   數(shù)據(jù)庫的邏輯設(shè)計、包括表與表之間的關(guān)系是優(yōu)化關(guān)系型數(shù)據(jù)庫性能的核心。一個好的邏輯數(shù)據(jù)庫設(shè)計可以為優(yōu)化數(shù)據(jù)庫和應(yīng)用程序打下良好的基礎(chǔ)。 ? ?
    ? ?
    ?   標(biāo)準(zhǔn)化的數(shù)據(jù)庫邏輯設(shè)計包括用多的、有相互關(guān)系的窄表來代替很多列的長數(shù)據(jù)表。下面是一些使用標(biāo)準(zhǔn)化表的一些好處。 ? ?
    ? ?
    ? A:由于表窄,因此可以使排序和建立索引更為迅速 ? ?
    ? B:由于多表,所以多鏃的索引成為可能 ? ?
    ? C:更窄更緊湊的索引 ? ?
    ? D:每個表中可以有少一些的索引,因此可以提高insert ? update ? delete等的速度,因?yàn)檫@些操作在索引多的情況下會對系統(tǒng)性能產(chǎn)生很大的影響 ? ?
    ? E:更少的空值和更少的多余值,增加了數(shù)據(jù)庫的緊湊性由于標(biāo)準(zhǔn)化,所以會增加了在獲取數(shù)據(jù)時引用表的數(shù)目和其間的連接關(guān)系的復(fù)雜性。太多的表和復(fù)雜的連接關(guān)系會降低服務(wù)器的性能,因此在這兩者之間需要綜合考慮。 ? ?
    ?   定義具有相關(guān)關(guān)系的主鍵和外來鍵時應(yīng)該注意的事項(xiàng)主要是:用于連接多表的主鍵和參考的鍵要有相同的數(shù)據(jù)類型。 ? ?
    ? ?
    ?   2 ? 索引的設(shè)計 ? ?
    ? A:盡量避免表掃描 ? ?
    ? 檢查你的查詢語句的where子句,因?yàn)檫@是優(yōu)化器重要關(guān)注的地方。包含在where里面的每一列(column)都是可能的侯選索引,為能達(dá)到最優(yōu)的性能,考慮在下面給出的例子:對于在where子句中給出了column1這個列。 ? ?
    ? 下面的兩個條件可以提高索引的優(yōu)化查詢性能! ? ?
    ? 第一:在表中的column1列上有一個單索引 ? ?
    ? 第二:在表中有多索引,但是column1是第一個索引的列 ? ?
    ? 避免定義多索引而column1是第二個或后面的索引,這樣的索引不能優(yōu)化服務(wù)器性能 ? ?
    ? 例如:下面的例子用了pubs數(shù)據(jù)庫。 ? ?
    ? SELECT ? au_id, ? au_lname, ? au_fname ? FROM ? authors ? ?
    ? WHERE ? au_lname ? = ? ’White’ ? ?
    ? 按下面幾個列上建立的索引將會是對優(yōu)化器有用的索引 ? ?
    ? ?au_lname ? ?
    ? ?au_lname, ? au_fname ? ?
    ? 而在下面幾個列上建立的索引將不會對優(yōu)化器起到好的作用 ? ?
    ? ?au_address ? ?
    ? ?au_fname, ? au_lname ? ?
    ? 考慮使用窄的索引在一個或兩個列上,窄索引比多索引和復(fù)合索引更能有效。用窄的索引,在每一頁上 ? ?
    ? 將會有更多的行和更少的索引級別(相對與多索引和復(fù)合索引而言),這將推進(jìn)系統(tǒng)性能。 ? ?
    ? 對于多列索引,SQL ? Server維持一個在所有列的索引上的密度統(tǒng)計(用于聯(lián)合)和在第一個索引上的 ? ?
    ? histogram(柱狀圖)統(tǒng)計。根據(jù)統(tǒng)計結(jié)果,如果在復(fù)合索引上的第一個索引很少被選擇使用,那么優(yōu)化器對很多查詢請求將不會使用索引。 ? ?
    ? 有用的索引會提高select語句的性能,包括insert,uodate,delete。 ? ?
    ? 但是,由于改變一個表的內(nèi)容,將會影響索引。每一個insert,update,delete語句將會使性能下降一些。實(shí)驗(yàn)表明,不要在一個單表上用大量的索引,不要在共享的列上(指在多表中用了參考約束)使用重疊的索引。 ? ?
    ? 在某一列上檢查唯一的數(shù)據(jù)的個數(shù),比較它與表中數(shù)據(jù)的行數(shù)做一個比較。這就是數(shù)據(jù)的選擇性,這比較結(jié)果將會幫助你決定是否將某一列作為侯選的索引列,如果需要,建哪一種索引。你可以用下面的查詢語句返回某一列的不同值的數(shù)目。 ? ?
    ? select ? count(distinct ? cloumn_name) ? from ? table_name ? ?
    ? 假設(shè)column_name是一個10000行的表,則看column_name返回值來決定是否應(yīng)該使用,及應(yīng)該使用什么索引。 ? ?
    ? Unique ? values ? Index ? ?
    ? ?
    ? 5000 ? Nonclustered ? index ? ?
    ? 20 ? Clustered ? index ? ?
    ? 3 ? No ? index ? ?
    ? ?
    ? 鏃索引和非鏃索引的選擇 ? ?
    ? ?
    ? <1:>鏃索引是行的物理順序和索引的順序是一致的。頁級,低層等索引的各個級別上都包含實(shí)際的數(shù)據(jù)頁。一個表只能是有一個鏃索引。由于update,delete語句要求相對多一些的讀操作,因此鏃索引常常能加速這樣的操作。在至少有一個索引的表中,你應(yīng)該有一個鏃索引。 ? ?
    ? 在下面的幾個情況下,你可以考慮用鏃索引: ? ?
    ? 例如: ? 某列包括的不同值的個數(shù)是有限的(但是不是極少的) ? ?
    ? 顧客表的州名列有50個左右的不同州名的縮寫值,可以使用鏃索引。 ? ?
    ? 例如: ? 對返回一定范圍內(nèi)值的列可以使用鏃索引,比如用between,>,>=,<,<=等等來對列進(jìn)行操作的列上。 ? ?
    ? select ? * ? from ? sales ? where ? ord_date ? between ? ’5/1/93’ ? and ? ’6/1/93’ ? ?
    ? 例如: ? 對查詢時返回大量結(jié)果的列可以使用鏃索引。 ? ?
    ? SELECT ? * ? FROM ? phonebook ? WHERE ? last_name ? = ? ’Smith’ ? ?
    ? ?
    ? 當(dāng)有大量的行正在被插入表中時,要避免在本表一個自然增長(例如,identity列)的列上建立鏃索引。如果你建立了鏃的索引,那么insert的性能就會大大降低。因?yàn)槊恳粋€插入的行必須到表的最后,表的最后一個數(shù)據(jù)頁。 ? ?
    ? 當(dāng)一個數(shù)據(jù)正在被插入(這時這個數(shù)據(jù)頁是被鎖定的),所有的其他插入行必須等待直到當(dāng)前的插入已經(jīng)結(jié)束。 ? ?
    ? 一個索引的葉級頁中包括實(shí)際的數(shù)據(jù)頁,并且在硬盤上的數(shù)據(jù)頁的次序是跟鏃索引的邏輯次序一樣的。 ? ?
    ? ?
    ? <2:>一個非鏃的索引就是行的物理次序與索引的次序是不同的。一個非鏃索引的葉級包含了指向行數(shù)據(jù)頁的指針。 ? ?
    ? 在一個表中可以有多個非鏃索引,你可以在以下幾個情況下考慮使用非鏃索引。 ? ?
    ? 在有很多不同值的列上可以考慮使用非鏃索引 ? ?
    ? 例如:一個part_id列在一個part表中 ? ?
    ? select ? * ? from ? employee ? where ? emp_id ? = ? ’pcm9809f’ ? ?
    ? 查詢語句中用order ? by ? 子句的列上可以考慮使用鏃索引 ? ?
    ? ?
    ? 3 ? 查詢語句的設(shè)計 ? ?
    ? ?
    ? SQL ? Server優(yōu)化器通過分析查詢語句,自動對查詢進(jìn)行優(yōu)化并決定最有效的執(zhí)行方案。優(yōu)化器分析查詢語句來決定那個子句可以被優(yōu)化,并針對可以被優(yōu)化查詢的子句來選擇有用的索引。最后優(yōu)化器比較所有可能的執(zhí)行方案并選擇最有效的一個方案出來。 ? ?
    ? 在執(zhí)行一個查詢時,用一個where子句來限制必須處理的行數(shù),除非完全需要,否則應(yīng)該避免在一個表中無限制地讀并處理所有的行。 ? ?
    ? 例如下面的例子, ? ?
    ? select ? qty ? from ? sales ? where ? stor_id=7131 ? ?
    ? 是很有效的比下面這個無限制的查詢 ? ?
    ? select ? qty ? from ? sales ? ?
    ? 避免給客戶的最后數(shù)據(jù)選擇返回大量的結(jié)果集。允許SQL ? Server運(yùn)行滿足它目的的函數(shù)限制結(jié)果集的大小是更有效的。 ? ?
    ? 這能減少網(wǎng)絡(luò)I/O并能提高多用戶的相關(guān)并發(fā)時的應(yīng)用程序性能。因?yàn)閮?yōu)化器關(guān)注的焦點(diǎn)就是where子句的查詢,以利用有用的索引。在表中的每一個索引都可能成為包括在where子句中的侯選索引。為了最好的性能可以遵照下面的用于一個給定列column1的索引。 ? ?
    ? 第一:在表中的column1列上有一個單索引 ? ?
    ? 第二:在表中有多索引,但是column1是第一個索引的列不要在where子句中使用沒有column1列索引的查詢語句,并避免在where子句用一個多索引的非第一個索引的索引。 ? ?
    ? 這時多索引是沒有用的。 ? ?
    ? For ? example, ? given ? a ? multicolumn ? index ? on ? the ? au_lname, ? au_fname ? columns ? of ? the ? authors ? table ? in ? ?
    ? the ? pubs ? database, ? ?
    ? 下面這個query語句利用了au_lname上的索引 ? ?
    ? SELECT ? au_id, ? au_lname, ? au_fname ? FROM ? authors ? ?
    ? WHERE ? au_lname ? = ? ’White’ ? ?
    ? AND ? au_fname ? = ? ’Johnson’ ? ?
    ? SELECT ? au_id, ? au_lname, ? au_fname ? FROM ? authors ? ?
    ? WHERE ? au_lname ? = ? ’White’ ? ?
    ? 下面這個查詢沒有利用索引,因?yàn)樗褂昧硕嗨饕姆堑谝粋€索引的索引 ? ?
    ? SELECT ? au_id, ? au_lname, ? au_fname ? FROM ? authors ? ?
    ? WHERE ? au_fname ? = ? ’Johnson’??
    posted on 2007-01-15 19:35 放水老倌 閱讀(379) 評論(1)  編輯  收藏 所屬分類: 數(shù)據(jù)庫

    Feedback

    # re: 收集-數(shù)據(jù)庫優(yōu)化[未登錄] 2007-01-17 21:35 X
    老李,整點(diǎn)我能懂的都不行.明顯欺負(fù)人!哼!  回復(fù)  更多評論
      

    主站蜘蛛池模板: 日本免费一区二区三区最新| 久久久亚洲欧洲日产国码是AV| 一个人免费观看日本www视频| 亚洲精品无码高潮喷水在线| 免费女人高潮流视频在线观看 | 4虎1515hh永久免费| 亚洲色成人四虎在线观看| 四虎影视永久免费观看| 久久99免费视频| 亚洲AV无码资源在线观看| 99久久国产免费-99久久国产免费| 亚洲国产av美女网站| 凹凸精品视频分类国产品免费| 最新国产乱人伦偷精品免费网站| 亚洲愉拍一区二区三区| 国产成人亚洲精品影院| 一本岛高清v不卡免费一三区| 日韩在线观看视频免费| 亚洲午夜电影在线观看| 国产成人麻豆亚洲综合无码精品| 中文字幕人成无码免费视频| 一个人看的免费观看日本视频www 一个人看的免费视频www在线高清动漫 | 亚洲另类自拍丝袜第1页| 成人亚洲网站www在线观看| 亚洲成aⅴ人片久青草影院按摩| 国产老女人精品免费视频| 男人j进入女人j内部免费网站| 亚洲精品av无码喷奶水糖心| 亚洲av日韩av激情亚洲| 免费一级毛片一级毛片aa| 亚洲精品无码国产片| 亚洲国产精品成人网址天堂| 国产福利在线观看免费第一福利| 成年女人A毛片免费视频| 亚洲妇女无套内射精| 亚洲欧洲精品国产区| 亚洲精品无码久久久久去q| 又粗又黄又猛又爽大片免费| 手机在线看永久av片免费| 3344免费播放观看视频| 国产成人无码区免费内射一片色欲|