国产99福利精品视频|杨幂精品国产福利在线|国精品午夜福利视频不卡|欧美精品黄网站在线播放|精品国产乱码久久久久久久|国产大片中文字幕在线观看|国产肥熟女视频一区二区三区|国产乱码无码视频一区二区三区

提高SQL查詢(xún)性能的七個(gè)法寶?

來(lái)源:北大青鳥(niǎo)飛迅校區(qū)|發(fā)布時(shí)間:2013-04-30 16:28:24

  每個(gè)數(shù)據(jù)庫(kù)平臺(tái)上的SQL開(kāi)發(fā)人員都是在困難中求得生存,我們總是一次又一次犯同樣的錯(cuò)誤,這是因?yàn)閿?shù)據(jù)庫(kù)領(lǐng)域還相對(duì)不成熟,是的,每個(gè)數(shù)據(jù)庫(kù)廠商都在做著各種不同的努力,但作每個(gè)數(shù)據(jù)庫(kù)平臺(tái)上的SQL開(kāi)發(fā)人員都是在困難中求得生存,我們總是一次又一次犯同樣的錯(cuò)誤,這是因?yàn)閿?shù)據(jù)庫(kù)領(lǐng)域還相對(duì)不成熟,是的,每個(gè)數(shù)據(jù)庫(kù)廠商都在做著各種不同的努力,但作為開(kāi)發(fā)人員仍然要克服各種問(wèn)題,無(wú)論是在SQL Server,Oracle,DB2,Sybase,MySQL數(shù)據(jù)庫(kù),還是其它關(guān)系數(shù)據(jù)庫(kù)平臺(tái)上編寫(xiě)SQL代碼,并發(fā)性、資源管理、空間管理和SQL運(yùn)行速度總是困擾著開(kāi)發(fā)人員。

  遺憾的是,其中部分問(wèn)題的解決沒(méi)有靈丹妙藥,也幾乎沒(méi)有最佳實(shí)踐。通常,開(kāi)發(fā)人員有自己喜歡的SQL書(shū)寫(xiě)習(xí)慣,一般不愿意去研究其它可行方案,當(dāng)然這可能是因?yàn)槿鄙倥嘤?xùn)的原因。我見(jiàn)得最多的就是在測(cè)試環(huán)境中SQL查詢(xún)運(yùn)行良好,但尚未在生產(chǎn)系統(tǒng)上進(jìn)行試運(yùn)行,就草草收?qǐng)隽耍劣诤髞?lái)發(fā)現(xiàn)有問(wèn)題,再被動(dòng)式修改,因此最終用戶(hù)就痛苦了。

  我不期望開(kāi)發(fā)人員成為DBA,但我們編寫(xiě)代碼時(shí)必須考慮生產(chǎn)時(shí)的問(wèn)題,如果不在開(kāi)發(fā)初期這么做,DBA發(fā)現(xiàn)后只能迫使我們返工。

  我們通常說(shuō)數(shù)據(jù)庫(kù)調(diào)試是一門(mén)技術(shù),更是一門(mén)藝術(shù),這是因?yàn)楹苌儆鞋F(xiàn)成的規(guī)則可以適應(yīng)一切問(wèn)題的解決,你在一個(gè)系統(tǒng)上解決的問(wèn)題在另一個(gè)系統(tǒng)上可能就不是問(wèn)題了,反之亦然。涉及到查詢(xún)調(diào)整時(shí),沒(méi)有一個(gè)答案是完全正確的,但這并不意味著你應(yīng)該放棄。

  適當(dāng)遵循一些原則可以讓工作變得更加輕松,本文就列舉7個(gè)可以靈活運(yùn)用的原則,它們可以幫助你提高SQL查詢(xún)速度,當(dāng)然這些技巧你可以咨詢(xún)DBA獲得更多的信息。

  1、用case代替update

  要更新一條記錄,我們立即會(huì)想到update,這個(gè)問(wèn)題非常常見(jiàn),許多開(kāi)發(fā)人員經(jīng)常忽視這個(gè)原則,因?yàn)槭褂胾pdate看起來(lái)非常自然,非常合乎邏輯。

  假設(shè)你從Customer表中提取記錄,你想將超過(guò)10萬(wàn)美元的訂單標(biāo)記為“Preferred”,因此你會(huì)想到使用一條update語(yǔ)句將CustomerRank列更新為“Preferred”,問(wèn)題是update語(yǔ)句是有日志的,這就意味著每條記錄它會(huì)寫(xiě)兩次,解決這個(gè)問(wèn)題的辦法就是在SQL查詢(xún)中內(nèi)嵌case語(yǔ)句,在向表寫(xiě)入“Preferred”標(biāo)志前,它會(huì)用訂單金額條件對(duì)每一行進(jìn)行檢查,滿(mǎn)足條件的才會(huì)更新,性能的提升是驚人的。

  2、不要盲目地重用代碼

  這個(gè)問(wèn)題也非常常見(jiàn),在工作中直接用別人寫(xiě)好的代碼是一件痛快的事情,你知道這些代碼可以查詢(xún)出你需要的數(shù)據(jù),但問(wèn)題是往往有些數(shù)據(jù)不是你需要的,但我們常常不愿意做一下修改,因此返回的數(shù)據(jù)集往往是一個(gè)超集,很可能多用一個(gè)外連接或是一個(gè)where子句就可以解決問(wèn)題,因此在復(fù)用代碼時(shí)最好檢查一下,如有必要略做適應(yīng)性修改。

  3、只提取你需要的列

  這個(gè)問(wèn)題和2有點(diǎn)類(lèi)似,但這次是指定具體的列。也許我們?cè)谑褂胹elect * 時(shí)感覺(jué)很暢快,多省事呀!如果要將每個(gè)列名都寫(xiě)出來(lái),太麻煩了,這是很多人的想法,但這種想法是錯(cuò)誤的,因?yàn)檫@樣做會(huì)取出多余的數(shù)據(jù)列,我無(wú)數(shù)次看到犯這種錯(cuò)誤的代碼,曾經(jīng)有一位開(kāi)發(fā)人員對(duì)一張有120列,上百萬(wàn)行數(shù)據(jù)的表使用select * 查詢(xún),但他只會(huì)用到其中的三五列,這是對(duì)資源的極大浪費(fèi),我們建議拒絕書(shū)寫(xiě)select * ,你要什么就查詢(xún)什么,多余的返回結(jié)果對(duì)你沒(méi)用,雖然不影響你要實(shí)現(xiàn)的功能,但對(duì)數(shù)據(jù)庫(kù)性能卻有極大的影響。

上一篇:監(jiān)控?cái)?shù)據(jù)庫(kù)性能的sql常見(jiàn)問(wèn)題(一)
下一篇:MySQl事務(wù)隔離級(jí)別的命令代碼是怎樣的?

熱門(mén)話題

招生熱線: 4008-0731-86 / 0731-82186801

學(xué)校地址: 長(zhǎng)沙市天心區(qū)團(tuán)結(jié)路6號(hào)

Copyright © 2006 | 湖南大計(jì)信息科技有限公司 版權(quán)所有

湘ICP備14017520號(hào)-3

關(guān)注我們
在線咨詢(xún)
嘿,我來(lái)幫您!