您的位置:首頁 > 軟件資訊 > 編程技巧 > 數(shù)據(jù)庫
來源:北大青鳥飛迅校區(qū)|發(fā)布時間:2013-04-30 16:28:24
每個數(shù)據(jù)庫平臺上的SQL開發(fā)人員都是在困難中求得生存,我們總是一次又一次犯同樣的錯誤,這是因為數(shù)據(jù)庫領(lǐng)域還相對不成熟,是的,每個數(shù)據(jù)庫廠商都在做著各種不同的努力,但作每個數(shù)據(jù)庫平臺上的SQL開發(fā)人員都是在困難中求得生存,我們總是一次又一次犯同樣的錯誤,這是因為數(shù)據(jù)庫領(lǐng)域還相對不成熟,是的,每個數(shù)據(jù)庫廠商都在做著各種不同的努力,但作為開發(fā)人員仍然要克服各種問題,無論是在SQL Server,Oracle,DB2,Sybase,MySQL數(shù)據(jù)庫,還是其它關(guān)系數(shù)據(jù)庫平臺上編寫SQL代碼,并發(fā)性、資源管理、空間管理和SQL運(yùn)行速度總是困擾著開發(fā)人員。
遺憾的是,其中部分問題的解決沒有靈丹妙藥,也幾乎沒有最佳實(shí)踐。通常,開發(fā)人員有自己喜歡的SQL書寫習(xí)慣,一般不愿意去研究其它可行方案,當(dāng)然這可能是因為缺少培訓(xùn)的原因。我見得最多的就是在測試環(huán)境中SQL查詢運(yùn)行良好,但尚未在生產(chǎn)系統(tǒng)上進(jìn)行試運(yùn)行,就草草收場了,至于后來發(fā)現(xiàn)有問題,再被動式修改,因此最終用戶就痛苦了。
我不期望開發(fā)人員成為DBA,但我們編寫代碼時必須考慮生產(chǎn)時的問題,如果不在開發(fā)初期這么做,DBA發(fā)現(xiàn)后只能迫使我們返工。
我們通常說數(shù)據(jù)庫調(diào)試是一門技術(shù),更是一門藝術(shù),這是因為很少有現(xiàn)成的規(guī)則可以適應(yīng)一切問題的解決,你在一個系統(tǒng)上解決的問題在另一個系統(tǒng)上可能就不是問題了,反之亦然。涉及到查詢調(diào)整時,沒有一個答案是完全正確的,但這并不意味著你應(yīng)該放棄。
適當(dāng)遵循一些原則可以讓工作變得更加輕松,本文就列舉7個可以靈活運(yùn)用的原則,它們可以幫助你提高SQL查詢速度,當(dāng)然這些技巧你可以咨詢DBA獲得更多的信息。
1、用case代替update
要更新一條記錄,我們立即會想到update,這個問題非常常見,許多開發(fā)人員經(jīng)常忽視這個原則,因為使用update看起來非常自然,非常合乎邏輯。
假設(shè)你從Customer表中提取記錄,你想將超過10萬美元的訂單標(biāo)記為“Preferred”,因此你會想到使用一條update語句將CustomerRank列更新為“Preferred”,問題是update語句是有日志的,這就意味著每條記錄它會寫兩次,解決這個問題的辦法就是在SQL查詢中內(nèi)嵌case語句,在向表寫入“Preferred”標(biāo)志前,它會用訂單金額條件對每一行進(jìn)行檢查,滿足條件的才會更新,性能的提升是驚人的。
2、不要盲目地重用代碼
這個問題也非常常見,在工作中直接用別人寫好的代碼是一件痛快的事情,你知道這些代碼可以查詢出你需要的數(shù)據(jù),但問題是往往有些數(shù)據(jù)不是你需要的,但我們常常不愿意做一下修改,因此返回的數(shù)據(jù)集往往是一個超集,很可能多用一個外連接或是一個where子句就可以解決問題,因此在復(fù)用代碼時最好檢查一下,如有必要略做適應(yīng)性修改。
3、只提取你需要的列
這個問題和2有點(diǎn)類似,但這次是指定具體的列。也許我們在使用select * 時感覺很暢快,多省事呀!如果要將每個列名都寫出來,太麻煩了,這是很多人的想法,但這種想法是錯誤的,因為這樣做會取出多余的數(shù)據(jù)列,我無數(shù)次看到犯這種錯誤的代碼,曾經(jīng)有一位開發(fā)人員對一張有120列,上百萬行數(shù)據(jù)的表使用select * 查詢,但他只會用到其中的三五列,這是對資源的極大浪費(fèi),我們建議拒絕書寫select * ,你要什么就查詢什么,多余的返回結(jié)果對你沒用,雖然不影響你要實(shí)現(xiàn)的功能,但對數(shù)據(jù)庫性能卻有極大的影響。
全程面授,不高薪都難
申請成功后,我們將在24小時內(nèi)與您聯(lián)系
招生熱線: 4008-0731-86 / 0731-82186801
學(xué)校地址: 長沙市天心區(qū)團(tuán)結(jié)路6號
Copyright © 2006 | 湖南大計信息科技有限公司 版權(quán)所有
湘ICP備14017520號-3