mysqlsql語(yǔ)句的優(yōu)化面試

mysqlsql語(yǔ)句的優(yōu)化面試

ID:23325840

大?。?2.00 KB

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

時(shí)間:2018-11-07

mysqlsql語(yǔ)句的優(yōu)化面試_第1頁(yè)
mysqlsql語(yǔ)句的優(yōu)化面試_第2頁(yè)
mysqlsql語(yǔ)句的優(yōu)化面試_第3頁(yè)
mysqlsql語(yǔ)句的優(yōu)化面試_第4頁(yè)
mysqlsql語(yǔ)句的優(yōu)化面試_第5頁(yè)
資源描述:

《mysqlsql語(yǔ)句的優(yōu)化面試》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)

1、mysqlsql語(yǔ)句的優(yōu)化面試MySQL查詢語(yǔ)句優(yōu)化心得MySQL優(yōu)化Sql查詢語(yǔ)句優(yōu)化心得MySQL優(yōu)化2010-12-2414:31作為一個(gè)互聯(lián)X開(kāi)發(fā)工程師,數(shù)據(jù)庫(kù)的知識(shí)是必不可少的,要是寫(xiě)幾條查詢效率很差的SQL,當(dāng)數(shù)據(jù)庫(kù)的數(shù)據(jù)到達(dá)一定級(jí)別以后,沒(méi)幾個(gè)人同時(shí)訪問(wèn)你的X站,就能把你的一臺(tái)服務(wù)器高掛啦!【個(gè)人認(rèn)為:最為簡(jiǎn)單的測(cè)試方法就是把SQL語(yǔ)句在命令行下運(yùn)行,若查詢的語(yǔ)句需要0.03秒以上的SQL語(yǔ)句都需要優(yōu)化?!咳缦碌拇蠖喽紒?lái)自X絡(luò):終歸起來(lái)、都是一些簡(jiǎn)單SQL優(yōu)化,不敢保證這說(shuō)法絕對(duì)的權(quán)威哦。phpma1

2、、用程序中,保證在實(shí)現(xiàn)功能的基礎(chǔ)上,盡量減少對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)次數(shù);通過(guò)搜索參數(shù),盡量減少對(duì)表的訪問(wèn)行數(shù),最小化結(jié)果集,從而減輕X絡(luò)負(fù)擔(dān);能夠分開(kāi)的操作盡量分開(kāi)處理,提高每次的響應(yīng)速度;在數(shù)據(jù)窗口使用SQL時(shí),盡量把使用的索引放在選擇的首列;算法的結(jié)構(gòu)盡量簡(jiǎn)單;在查詢時(shí),不要過(guò)多地使用通配符如SELECT*FROMT1語(yǔ)句,要用到幾列就選擇幾列如:SELECTCOL1,COL2FROMT1;在可能的情況下盡量限制盡量結(jié)果集行數(shù)如:SELECTTOP300COL1,COL2,COL3FROMT1,因?yàn)槟承┣闆r下用戶是不需

3、要那么多的數(shù)據(jù)的。不要在應(yīng)用中使用數(shù)據(jù)庫(kù)游標(biāo),游標(biāo)是非常有用的工具,但比使用常規(guī)的、面向集的SQL語(yǔ)句需要更大的開(kāi)銷(xiāo);按照特定順序提取數(shù)據(jù)的查找。2、避免使用不兼容的數(shù)據(jù)類(lèi)型。例如float和int、char和varchar、binary和varbinary是不兼容的。數(shù)據(jù)類(lèi)型的不兼容可能使優(yōu)化器無(wú)法執(zhí)行一些本來(lái)可以進(jìn)行的優(yōu)化操作。例如:SELECTnameFROMemployeeT1T1RECORDRECORDmembersmembersemployee(T1.C1)FROMT1T2(T1.C1)FROMT1T2

4、table_nametable_namehdr_tbla----tbla表示tbl用別名a代替dtl_tblbhdr_tblaLEFTJOINdtl_tblbONa.hdr_key=b.hdr_keyhdr_tbldtl_tbl)三種寫(xiě)法都可以得到同樣正確的結(jié)果,但是效率依次降低。7、盡量避免在索引過(guò)的字符數(shù)據(jù)中,使用非打頭字母搜索。這也使得引擎無(wú)法利用索引。見(jiàn)如下例子:SELECT*FROMT1ELIKE‘%L%’SELECT*FROMT1E,2,1)=’L’SELECT*FROMT1ELIKE‘L%’即使NAM

5、E字段建有索引,前兩個(gè)查詢依然無(wú)法利用索引完成加快操作,引擎不得不對(duì)全表所有數(shù)據(jù)逐條操作來(lái)完成任務(wù)。而第三個(gè)查詢能夠使用索引來(lái)加快操作。51ruan.8、分利用連接條件,在某種情況下,兩個(gè)表之間可能不只一個(gè)的連接條件,這時(shí)在(A.AMOUNT)FROMACCOUNTA,CARDB(A.AMOUNT)FROMACCOUNTA,CARDBordersordersordersT1T1DetailsDetailsT1T1T1T1(INDEX=IX_ProcessID)T1語(yǔ)句,要用到幾列就選擇幾列如:SELECTCOL1,

6、COL2FROMT1;在可能的情況下盡量限制盡量結(jié)果集行數(shù)如:SELECTTOP300COL1,COL2,COL3FROMT1,因?yàn)槟承┣闆r下用戶是不需要那么多的數(shù)據(jù)的。在沒(méi)有建索引的情況下,數(shù)據(jù)庫(kù)查找某一條數(shù)據(jù),就必須進(jìn)行全表掃描了,對(duì)所有數(shù)據(jù)進(jìn)行一次遍歷,查找出符合條件的記錄。在數(shù)據(jù)量比較小的情況下,也許看不出明顯的差別,但是當(dāng)數(shù)據(jù)量大的情況下,這種情況就是極為糟糕的了。SQL語(yǔ)句在SQL中是如何執(zhí)行的,他們擔(dān)心自己所寫(xiě)的SQL語(yǔ)句會(huì)被SQLSERVER誤解。比如:select*fromtable1e=?zha

7、ngsan?andtID>10000和執(zhí)行:select*fromtable1e=?zhangsan?一些人不知道以上兩條語(yǔ)句的執(zhí)行效率是否一樣,因?yàn)槿绻?jiǎn)單的從語(yǔ)句先后上看,這兩個(gè)語(yǔ)句的確是不一樣,如果tID是一個(gè)聚合索引,那么后一句僅僅從表的10000條以后的記錄中查找就行了;而前一句則要先從全表中查找看有幾個(gè)name=?zhangsan?的,而后再根據(jù)限制條件條件tID>10000來(lái)提出查詢結(jié)果。事實(shí)上,這樣的擔(dān)心是不必要的。SQLSERVER中有一個(gè)“查詢分析優(yōu)化器”,它可以計(jì)算出e=?張三?價(jià)

8、格>50005000<價(jià)格Name=?張三?and價(jià)格>5000如果一個(gè)表達(dá)式不能滿足SARG的形式,那它就無(wú)法限制搜索的范圍了,也就是SQLSERVER必須對(duì)每一行都判斷它是否滿足SCL,SCRAX(IL.score)FROMSCIL,StudentIM.S#=IL.S#GROUPBYIL.C#)andR.Score=(SELECTMIN

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

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

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫(huà)的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(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)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。