sqlserver建立索引 注意的問題

sqlserver建立索引 注意的問題

ID:6615798

大?。?1.50 KB

頁(yè)數(shù):8頁(yè)

時(shí)間:2018-01-20

sqlserver建立索引 注意的問題_第1頁(yè)
sqlserver建立索引 注意的問題_第2頁(yè)
sqlserver建立索引 注意的問題_第3頁(yè)
sqlserver建立索引 注意的問題_第4頁(yè)
sqlserver建立索引 注意的問題_第5頁(yè)
資源描述:

《sqlserver建立索引 注意的問題》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫(kù)

1、SQLSERVER建立索引注意的問題SQLSERVER建立索引注意的問題2008-12-1716:23:19

2、分類:sqlserver

3、標(biāo)簽:

4、字號(hào)大中小訂閱.----人們?cè)谑褂肧QL時(shí)往往會(huì)陷入一個(gè)誤區(qū),即太關(guān)注于所得的結(jié)果是否正確,而忽略了不同的實(shí)現(xiàn)方法之間可能存在的性能差異,這種性能差異在大型的或是復(fù)雜的數(shù)據(jù)庫(kù)環(huán)境中(如聯(lián)機(jī)事務(wù)處理OLTP或決策支持系統(tǒng)DSS)中表現(xiàn)得尤為明顯。筆者在工作實(shí)踐中發(fā)現(xiàn),不良的SQL往往來自于不恰當(dāng)?shù)乃饕O(shè)計(jì)、不充份的連接條件和不可優(yōu)化的where子句。在對(duì)它們進(jìn)行適當(dāng)?shù)膬?yōu)化后,其運(yùn)行速度有了明顯地提

5、高!下面我將從這三個(gè)方面分別進(jìn)行總結(jié):----為了更直觀地說明問題,所有實(shí)例中的SQL運(yùn)行時(shí)間均經(jīng)過測(cè)試,不超過1秒的均表示為(<1秒)。----測(cè)試環(huán)境------主機(jī):HPLHII----主頻:330MHZ----內(nèi)存:128兆----操作系統(tǒng):Operserver5.0.4----數(shù)據(jù)庫(kù):Sybase11.0.3一、不合理的索引設(shè)計(jì)----例:表record有620000行,試看在不同的索引下,下面幾個(gè)SQL的運(yùn)行情況:----1.在date上建有一個(gè)非群集索引selectcount(*)fromrecordwheredate>'

6、19991201'anddate<'19991214'andamount>2000(25秒)selectdate,sum(amount)fromrecordgroupbydate(55秒)selectcount(*)fromrecordwheredate>'19990901'andplacein('BJ','SH')(27秒)----分析:----date上有大量的重復(fù)值,在非群集索引下,數(shù)據(jù)在物理上隨機(jī)存放在數(shù)據(jù)頁(yè)上,在范圍查找時(shí),必須執(zhí)行一次表掃描才能找到這一范圍內(nèi)的全部行。----2.在date上的一個(gè)群集索引selectcoun

7、t(*)fromrecordwheredate>'19991201'anddate<'19991214'andamount>2000(14秒)selectdate,sum(amount)fromrecordgroupbydate(28秒)selectcount(*)fromrecordwheredate>'19990901'andplacein('BJ','SH')(14秒)----分析:----在群集索引下,數(shù)據(jù)在物理上按順序在數(shù)據(jù)頁(yè)上,重復(fù)值也排列在一起,因而在范圍查找時(shí),可以先找到這個(gè)范圍的起末點(diǎn),且只在這個(gè)范圍內(nèi)掃描數(shù)據(jù)頁(yè),避免

8、了大范圍掃描,提高了查詢速度。----3.在place,date,amount上的組合索引selectcount(*)fromrecordwheredate>'19991201'anddate<'19991214'andamount>2000(26秒)selectdate,sum(amount)fromrecordgroupbydate(27秒)selectcount(*)fromrecordwheredate>'19990901'andplacein('BJ,'SH')(<1秒)----分析:----這是一個(gè)不很合理的組合索引,因?yàn)樗?/p>

9、的前導(dǎo)列是place,第一和第二條SQL沒有引用place,因此也沒有利用上索引;第三個(gè)SQL使用了place,且引用的所有列都包含在組合索引中,形成了索引覆蓋,所以它的速度是非??斓?。----4.在date,place,amount上的組合索引selectcount(*)fromrecordwheredate>'19991201'anddate<'19991214'andamount>2000(<1秒)selectdate,sum(amount)fromrecordgroupbydate(11秒)selectcount(*)fromr

10、ecordwheredate>'19990901'andplacein('BJ','SH')(<1秒)----分析:----這是一個(gè)合理的組合索引。它將date作為前導(dǎo)列,使每個(gè)SQL都可以利用索引,并且在第一和第三個(gè)SQL中形成了索引覆蓋,因而性能達(dá)到了最優(yōu)。----5.總結(jié):----缺省情況下建立的索引是非群集索引,但有時(shí)它并不是最佳的;合理的索引設(shè)計(jì)要建立在對(duì)各種查詢的分析和預(yù)測(cè)上。一般來說:----①.有大量重復(fù)值、且經(jīng)常有范圍查詢(between,>,<,>=,<=)和orderby、groupby發(fā)生的列,可考慮建立群集索引

11、;----②.經(jīng)常同時(shí)存取多列,且每列都含有重復(fù)值可考慮建立組合索引;----③.組合索引要盡量使關(guān)鍵查詢形成索引覆蓋,其前導(dǎo)列一定是使用最頻繁的列。二、不充份的連接條件:----例:表card有7896行

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。