Sqlserver SQL性能優(yōu)化經(jīng)驗.doc

Sqlserver SQL性能優(yōu)化經(jīng)驗.doc

ID:48211296

大小:21.69 KB

頁數(shù):11頁

時間:2020-01-22

Sqlserver SQL性能優(yōu)化經(jīng)驗.doc_第1頁
Sqlserver SQL性能優(yōu)化經(jīng)驗.doc_第2頁
Sqlserver SQL性能優(yōu)化經(jīng)驗.doc_第3頁
Sqlserver SQL性能優(yōu)化經(jīng)驗.doc_第4頁
Sqlserver SQL性能優(yōu)化經(jīng)驗.doc_第5頁
資源描述:

《Sqlserver SQL性能優(yōu)化經(jīng)驗.doc》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在行業(yè)資料-天天文庫。

1、SqlserverSQL性能優(yōu)化經(jīng)驗1.選擇最有效率的表名順序(只在基于規(guī)則的優(yōu)化器中有效)    SQLSERVER的解析器按照從右到左的順序處理FROM子句中的表名,因此FROM子句中寫在最后的表(基礎表drivingtable)將被最先處理,在FROM子句中包含多個表的情況下,必須選擇記錄條數(shù)最少的表作為基礎表,當SQLSERVER處理多個表時,會運用排序及合并的方式連接它們,  首先,掃描第一個表(FROM子句中最后的那個表)并對記錄進行排序;然后掃描第二個表(FROM子句中最后第二個表);最后將所有從

2、第二個表中檢索出的記錄與第一個表中合適記錄進行合并  例如:表TAB116,384條記錄表TAB25條記錄,選擇TAB2作為基礎表(最好的方法)selectcount(*)fromtab1,tab2執(zhí)行時間0.96秒,選擇TAB2作為基礎表(不佳的方法)selectcount(*)fromtab2,tab1執(zhí)行時間26.09秒;如果有3個以上的表連接查詢,那就需要選擇交叉表(intersectiontable)作為基礎表,交叉表是指那個被其他表所引用的表    例如:  EMP表描述了LOCATION表和CAT

3、EGORY表的交集  SELECT*  FROMLOCATIONL,  CATEGORYC,  EMPE  WHEREE.EMP_NOBETWEEN1000AND2000  ANDE.CAT_NO=C.CAT_NO  ANDE.LOCN=L.LOCN    將比下列SQL更有效率  SELECT*  FROMEMPE,  LOCATIONL,  CATEGORYC  WHEREE.CAT_NO=C.CAT_NO  ANDE.LOCN=L.LOCN  ANDE.EMP_NOBETWEEN1000AND2000  

4、2.WHERE子句中的連接順序    SQLSERVER采用自下而上的順序解析WHERE子句,根據(jù)這個原理,表之間的連接必須寫在其他WHERE條件之前,那些可以過濾掉最大數(shù)量記錄的條件必須寫在WHERE子句的末尾    例如:  (低效,執(zhí)行時間156.3秒)  SELECT*  FROMEMPE  WHERESAL>50000  ANDJOB=’MANAGER’  AND25<(SELECTCOUNT(*)FROMEMPWHEREMGR=E.EMPNO);    (高效,執(zhí)行時間10.6秒)  SELECT*

5、  FROMEMPE  WHERE25<(SELECTCOUNT(*)FROMEMPWHEREMGR=E.EMPNO)  ANDSAL>50000  ANDJOB=’MANAGER’;  3.SELECT子句中避免使用’*’。當你想在SELECT子句中列出所有的COLUMN時,使用動態(tài)SQL列引用’*’是一個方便的方法,不幸的是,這是一個非常低效的方法。實際上,SQLSERVER在解析的過程中,會將’*’依次轉(zhuǎn)換成所有的列名,這個工作是通過查詢數(shù)據(jù)字典完成的,這意味著將耗費更多的時間  4.減少訪問數(shù)據(jù)庫的次數(shù)

6、。當執(zhí)行每條SQL語句時,SQLSERVER在內(nèi)部執(zhí)行了許多工作:解析SQL語句,估算索引的利用率,綁定變量,讀數(shù)據(jù)塊等等  由此可見,減少訪問數(shù)據(jù)庫的次數(shù),就能實際上減少SQLSERVER的工作量,例如:  以下有三種方法可以檢索出雇員號等于0342或0291的職員    方法1(最低效)  SELECTEMP_NAME,SALARY,GRADE  FROMEMP  WHEREEMP_NO=342;  SELECTEMP_NAME,SALARY,GRADE  FROMEMP  WHEREEMP_NO=291;

7、    方法2(次低效)  DECLARE  CURSORC1(E_NONUMBER)IS  SELECTEMP_NAME,SALARY,GRADE  FROMEMP  WHEREEMP_NO=E_NO;  BEGIN  OPENC1(342);  FETCHC1INTO…,…,…;  …  OPENC1(291);  FETCHC1INTO…,…,…;  …  CLOSEC1;  END;    方法2(高效)  SELECTA.EMP_NAME,A.SALARY,A.GRADE,  B.EMP_NAME,B

8、.SALARY,B.GRADE  FROMEMPA,EMPB  WHEREA.EMP_NO=342  ANDB.EMP_NO=291;  5.使用DECODE函數(shù)來減少處理時間    使用DECODE函數(shù)可以避免重復掃描相同記錄或重復連接相同的表    例如:  SELECTCOUNT(*),SUM(SAL)  FROMEMP  WHEREDEPT_NO=’0020’  ANDENAM

當前文檔最多預覽五頁,下載文檔查看全文

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

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