亚洲韩日午夜视频,欧美日韩在线精品一区二区三区,韩国超清无码一区二区三区,亚洲国产成人影院播放,久草新在线,在线看片AV色

您好,歡迎來到思海網(wǎng)絡(luò),我們將竭誠為您提供優(yōu)質(zhì)的服務(wù)! 誠征網(wǎng)絡(luò)推廣 | 網(wǎng)站備案 | 幫助中心 | 軟件下載 | 購買流程 | 付款方式 | 聯(lián)系我們 [ 會員登錄/注冊 ]
促銷推廣
客服中心
業(yè)務(wù)咨詢
有事點擊這里…  531199185
有事點擊這里…  61352289
點擊這里給我發(fā)消息  81721488
有事點擊這里…  376585780
有事點擊這里…  872642803
有事點擊這里…  459248018
有事點擊這里…  61352288
有事點擊這里…  380791050
技術(shù)支持
有事點擊這里…  714236853
有事點擊這里…  719304487
有事點擊這里…  1208894568
有事點擊這里…  61352289
在線客服
有事點擊這里…  531199185
有事點擊這里…  61352288
有事點擊這里…  983054746
有事點擊這里…  893984210
當(dāng)前位置:首頁 >> 技術(shù)文章 >> 文章瀏覽
技術(shù)文章

影響SQL Server性能的設(shè)計

添加時間:2014-4-18 16:38:59  添加: 思海網(wǎng)絡(luò) 

影響SQL Server性能的設(shè)計有以下幾方面:

  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等的速度,因為這些操作在索引多的情況下會對系統(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)該注意的事項主要是:用于連接多表的主鍵和參考的鍵要有相同的數(shù)據(jù)類型。

  2.索引的設(shè)計

  A:盡量避免表掃描

  檢查你的查詢語句的where子句,因為這是優(yōu)化器重要關(guān)注的地方。包含在where里面的每一列(column)都是可能的侯選索引,為能達到最優(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ù)合索引而言),這將推進系統(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ù)據(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ù)據(jù)頁。一個表只能是有一個鏃索引。由于update,delete語句要求相對多一些的讀操作,因此鏃索引常常能加速這樣的操作。 在至少有一個索引的表中,你應(yīng)該有一個鏃索引。

  在下面的幾個情況下,你可以考慮用鏃索引:

  例如: 某列包括的不同值的個數(shù)是有限的(但是不是極少的)

  顧客表的州名列有50個左右的不同州名的縮寫值,可以使用鏃索引。

  例如: 對返回一定范圍內(nèi)值的列可以使用鏃索引,比如用between,>,>=,<,<=等等來對列進行操作的列上。

  select * from sales where ord_date between5/1/93and6/1/93

 

  例如: 對查詢時返回大量結(jié)果的列可以使用鏃索引。

  SELECT * FROM phonebook WHERE last_name = ’Smith’

  當(dāng)有大量的行正在被插入表中時,要避免在本表一個自然增長(例如,identity列)的列上建立鏃索引。如果你建立了鏃的索引,那么insert的性能就會大大降低。因為每一個插入的行必須到表的最后,表的最后一個數(shù)據(jù)頁。

  當(dāng)一個數(shù)據(jù)正在被插入(這時這個數(shù)據(jù)頁是被鎖定的),所有的其他插入行必須等待直到當(dāng)前的插入已經(jīng)結(jié)束。

  一個索引的葉級頁中包括實際的數(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)化器通過分析查詢語句,自動對查詢進行優(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運行滿足它目的的函數(shù)限制結(jié)果集的大小是更有效的。

  這能減少網(wǎng)絡(luò)I/O并能提高多用戶的相關(guān)并發(fā)時的應(yīng)用程序性能。因為優(yōu)化器關(guā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’

  下面這個查詢沒有利用索引,因為他使用了多索引的非第一個索引的索引

  SELECT au_id, au_lname, au_fname FROM authors

  
WHERE au_fname = ’Johnson’

  (凡署名“IT168”的稿件均為本站原創(chuàng),請在轉(zhuǎn)載時注明出處及作者。非上述媒體稿件均系轉(zhuǎn)載,轉(zhuǎn)載目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點和對其真實性負(fù)責(zé)。轉(zhuǎn)載者自負(fù)版權(quán)等法律責(zé)任。)

  

  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等的速度,因為這些操作在索引多的情況下會對系統(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)該注意的事項主要是:用于連接多表的主鍵和參考的鍵要有相同的數(shù)據(jù)類型。

  2.索引的設(shè)計

  A:盡量避免表掃描

  檢查你的查詢語句的where子句,因為這是優(yōu)化器重要關(guān)注的地方。包含在where里面的每一列(column)都是可能的侯選索引,為能達到最優(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ù)合索引而言),這將推進系統(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ù)據(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ù)據(jù)頁。一個表只能是有一個鏃索引。由于 update,delete語句要求相對多一些的讀操作,因此鏃索引常常能加速這樣的操作。在至少有一個索引的表中,你應(yīng)該有一個鏃索引。

  在下面的幾個情況下,你可以考慮用鏃索引:

  例如: 某列包括的不同值的個數(shù)是有限的(但是不是極少的)

  顧客表的州名列有50個左右的不同州名的縮寫值,可以使用鏃索引。

  例如: 對返回一定范圍內(nèi)值的列可以使用鏃索引,比如用between,>,>=,<,<=等等來對列進行操作的列上。

  select * from sales where ord_date between5/1/93and6/1/93

 

  例如: 對查詢時返回大量結(jié)果的列可以使用鏃索引。

  SELECT * FROM phonebook WHERE last_name = ’Smith’

  當(dāng)有大量的行正在被插入表中時,要避免在本表一個自然增長(例如,identity列)的列上建立鏃索引。如果你建立了鏃的索引,那么insert的性能就會大大降低。因為每一個插入的行必須到表的最后,表的最后一個數(shù)據(jù)頁。

  當(dāng)一個數(shù)據(jù)正在被插入(這時這個數(shù)據(jù)頁是被鎖定的),所有的其他插入行必須等待直到當(dāng)前的插入已經(jīng)結(jié)束。

  一個索引的葉級頁中包括實際的數(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)化器通過分析查詢語句,自動對查詢進行優(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運行滿足它目的的函數(shù)限制結(jié)果集的大小是更有效的。

  這能減少網(wǎng)絡(luò)I/O并能提高多用戶的相關(guān)并發(fā)時的應(yīng)用程序性能。因為優(yōu)化器關(guā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’

  下面這個查詢沒有利用索引,因為他使用了多索引的非第一個索引的索引

  SELECT au_id, au_lname, au_fname FROM authors

  WHERE au_fname = ’Johnson’

關(guān)鍵字:SQL Server、設(shè)計、索引

分享到:

頂部 】 【 關(guān)閉
版權(quán)所有:佛山思海電腦網(wǎng)絡(luò)有限公司 ©1998-2024 All Rights Reserved.
聯(lián)系電話:(0757)22630313、22633833
中華人民共和國增值電信業(yè)務(wù)經(jīng)營許可證: 粵B1.B2-20030321 備案號:粵B2-20030321-1
網(wǎng)站公安備案編號:44060602000007 交互式欄目專項備案編號:200303DD003  
察察 工商 網(wǎng)安 舉報有獎  警警  手機打開網(wǎng)站