"5第六掌去掉Where子句中的ISNUL">
基于索引的SQL語句優(yōu)化之降龍十八掌

基于索引的SQL語句優(yōu)化之降龍十八掌

ID:47365384

大?。?7.00 KB

頁數(shù):10頁

時間:2020-01-10

基于索引的SQL語句優(yōu)化之降龍十八掌_第頁
預(yù)覽圖正在加載中,預(yù)計需要20秒,請耐心等待
資源描述:

《基于索引的SQL語句優(yōu)化之降龍十八掌》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。

1、.基于索引的SQL語句優(yōu)化之降龍十八掌1前言22總綱23降龍十八掌3第一掌避免對列的操作3第二掌避免不必要的類型轉(zhuǎn)換4第三掌增加查詢的范圍限制4第四掌盡量去掉"IN"、"OR"4第五掌盡量去掉"<>"5第六掌去掉Where子句中的ISNULL和ISNOTNULL5第七掌索引提高數(shù)據(jù)分布不均勻時查詢效率5第八掌利用HINT強制指定索引6第九掌屏蔽無用索引6第十掌分解復(fù)雜查詢,用常量代替變量7第十一掌like子句盡量前端匹配7第十二掌用Case語句合并多重掃描7第十三掌使用nls_date_format8第十四

2、掌使用基于函數(shù)的索引8第十五掌基于函數(shù)的索引要求等式匹配9第十六掌使用分區(qū)索引9第十七掌使用位圖索引9第十八掌決定使用全表掃描還是使用索引94總結(jié)10..1前言客服業(yè)務(wù)受到SQL語句的影響非常大,在規(guī)模比較大的局點,往往因為一個小的SQL語句不夠優(yōu)化,導(dǎo)致數(shù)據(jù)庫性能急劇下降,小型機idle所剩無幾,應(yīng)用服務(wù)器斷連、超時,嚴(yán)重影響業(yè)務(wù)的正常運行。因此,稱低效的SQL語句為客服業(yè)務(wù)的‘惡龍’并不過分。數(shù)據(jù)庫的優(yōu)化方法有很多種,在應(yīng)用層來說,主要是基于索引的優(yōu)化。本次秘笈根據(jù)實際的工作經(jīng)驗,在研發(fā)原來已有的方法的

3、基礎(chǔ)上,進行了一些擴充,總結(jié)了基于索引的SQL語句優(yōu)化的降龍十八掌,希望有一天你能用其中一掌來馴服客服業(yè)務(wù)中橫行的‘惡龍’。2總綱l建立必要的索引這次傳授的降龍十八掌,總綱只有一句話:建立必要的索引,這就是后面降龍十八掌的內(nèi)功基礎(chǔ)。這一點看似容易實際卻很難。難就難在如何判斷哪些索引是必要的,哪些又是不必要的。判斷的最終標(biāo)準(zhǔn)是看這些索引是否對我們的數(shù)據(jù)庫性能有所幫助。具體到方法上,就必須熟悉數(shù)據(jù)庫應(yīng)用程序中的所有SQL語句,從中統(tǒng)計出常用的可能對性能有影響的部分SQL,分析、歸納出作為Where條件子句的字段

4、及其組合方式;在這一基礎(chǔ)上可以初步判斷出哪些表的哪些字段應(yīng)該建立索引。其次,必須熟悉應(yīng)用程序。必須了解哪些表是數(shù)據(jù)操作頻繁的表;哪些表經(jīng)常與其他表進行連接;哪些表中的數(shù)據(jù)量可能很大;對于數(shù)據(jù)量大的表,其中各個字段的數(shù)據(jù)分布情況如何;等等。對于滿足以上條件的這些表,必須重點關(guān)注,因為在這些表上的索引,將對SQL語句的性能產(chǎn)生舉足輕重的影響。不過下面還是總結(jié)了一下降龍十八掌內(nèi)功的入門基礎(chǔ),建立索引常用的規(guī)則如下:1、表的主鍵、外鍵必須有索引;2、數(shù)據(jù)量超過300的表應(yīng)該有索引;3、經(jīng)常與其他表進行連接的表,在連

5、接字段上應(yīng)該建立索引;4、經(jīng)常出現(xiàn)在Where子句中的字段,特別是大表的字段,應(yīng)該建立索引;5、索引應(yīng)該建在選擇性高的字段上;6、索引應(yīng)該建在小字段上,對于大的文本字段甚至超長字段,不要建索引;7、復(fù)合索引的建立需要進行仔細分析;盡量考慮用單字段索引代替:A、正確選擇復(fù)合索引中的主列字段,一般是選擇性較好的字段;..B、復(fù)合索引的幾個字段是否經(jīng)常同時以AND方式出現(xiàn)在Where子句中?單字段查詢是否極少甚至沒有?如果是,則可以建立復(fù)合索引;否則考慮單字段索引;C、如果復(fù)合索引中包含的字段經(jīng)常單獨出現(xiàn)在Whe

6、re子句中,則分解為多個單字段索引;D、如果復(fù)合索引所包含的字段超過3個,那么仔細考慮其必要性,考慮減少復(fù)合的字段;E、如果既有單字段索引,又有這幾個字段上的復(fù)合索引,一般可以刪除復(fù)合索引;8、頻繁進行數(shù)據(jù)操作的表,不要建立太多的索引;9、刪除無用的索引,避免對執(zhí)行計劃造成負面影響;以上是一些普遍的建立索引時的判斷依據(jù)。一言以蔽之,索引的建立必須慎重,對每個索引的必要性都應(yīng)該經(jīng)過仔細分析,要有建立的依據(jù)。因為太多的索引與不充分、不正確的索引對性能都毫無益處:在表上建立的每個索引都會增加存儲開銷,索引對于插入

7、、刪除、更新操作也會增加處理上的開銷。另外,過多的復(fù)合索引,在有單字段索引的情況下,一般都是沒有存在價值的;相反,還會降低數(shù)據(jù)增加刪除時的性能,特別是對頻繁更新的表來說,負面影響更大。1降龍十八掌第一掌避免對列的操作任何對列的操作都可能導(dǎo)致全表掃描,這里所謂的操作包括數(shù)據(jù)庫函數(shù)、計算表達式等等,查詢時要盡可能將操作移至等式的右邊,甚至去掉函數(shù)。例1:下列SQL條件語句中的列都建有恰當(dāng)?shù)乃饕?,?0萬行數(shù)據(jù)情況下執(zhí)行速度卻非常慢:select*fromrecordwheresubstrb(CardNo,1,4

8、)='5378'(13秒)select*fromrecordwhereamount/30<1000(11秒)select*fromrecordwhereto_char(ActionTime,'yyyymmdd')='19991201'(10秒)由于where子句中對列的任何操作結(jié)果都是在SQL運行時逐行計算得到的,因此它不得不進行表掃描,而沒有使用該列上面的索引;如果這些結(jié)果在查詢編譯時就能得到,那么就可以被SQ

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

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

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