這是一個(gè)比較難以處理的問題,但是你可以從這里得到很多好處。很多情況下,都是可以使用臨時(shí)表的,比如:在避免兩次從一個(gè)大型表格里查詢時(shí)。在連接兩個(gè)表格的時(shí)候,你也可以使用臨時(shí)表來大大降低處理程序所占用的內(nèi)存。如果你必須把一個(gè)表合并到一個(gè)大型表格中,你可以通過先從大型表中檢索出你所需要的數(shù)據(jù)合并到臨時(shí)表中,然后用把這些數(shù)據(jù)合并的方法來優(yōu)化命令。如果在進(jìn)程中,你必須對(duì)同一個(gè)表進(jìn)行同樣的合并的時(shí)候,臨時(shí)表是一個(gè)非常有用的方式。
6.必須預(yù)存數(shù)據(jù)。
這是我比較喜歡的一個(gè)話題,因?yàn)檫@是一個(gè)比較容易被忽略的老方法。如果你有一個(gè)報(bào)告或者一個(gè)進(jìn)程,它們需要向一個(gè)大型表里做類型的合并,這時(shí),如果你能通過提前合并表格或者是插入表格的方法來預(yù)存數(shù)據(jù),這將對(duì)你的操作大大有益。
一般情況下,你是不能使用這個(gè)技巧的。但是,如果你可以,你會(huì)發(fā)現(xiàn)這將是一個(gè)非常完美的節(jié)約服務(wù)器資源的方法。
注意到這樣的問題,一般開發(fā)者通過關(guān)注查詢本身而避開這樣的合并問題,創(chuàng)建一個(gè)只可見的合并,以致于不能一而再,再而三地定義它們的合并環(huán)境。通過預(yù)存數(shù)據(jù),你只需執(zhí)行一次合并,同時(shí)別人也避免了大型的合并。我非常喜歡用這種方法,大多數(shù)情況下,有很多流行表總是執(zhí)行合并,所以沒有任何理由說不能預(yù)存數(shù)據(jù)。
7,分批地刪除和更新。
還有一個(gè)常被忽略的簡單技巧。如果你的操作錯(cuò)誤,從一個(gè)大型表里刪除和更新大量的數(shù)據(jù)將是一個(gè)噩夢。問題是這兩個(gè)命令執(zhí)行起來就像是一個(gè)命令,如果你需要放棄他們,或者如果你在工作的時(shí)候系統(tǒng)發(fā)生了什么事情,系統(tǒng)就必須從頭開始所有命令的執(zhí)行。這會(huì)花費(fèi)很多時(shí)間。這些操作也會(huì)妨礙別的命令的執(zhí)行,甚至?xí)蔀檎麄€(gè)系統(tǒng)的瓶頸。
解決這個(gè)問題的辦法是,小批量地刪除和更新數(shù)據(jù)。可以通過兩種方式來解決這個(gè)問題:一,如果命令的執(zhí)行因?yàn)槿魏卧虮唤K止,那就必須有一小部分行從頭開始執(zhí)行,所以數(shù)據(jù)庫恢復(fù)得將會(huì)快得多。二,當(dāng)更少的數(shù)據(jù)被存在了硬盤上時(shí),別的命令也可以做一些工作,所以并發(fā)性就被大大地優(yōu)化了。
按照這個(gè)指示,很多開發(fā)者企圖在一天之內(nèi)把這些刪除和更新操作完成。但是,這并不是總是正確的,特別是當(dāng)你在存檔的時(shí)候。只要你需要,你可以盡可能地?cái)U(kuò)展這些炒作,而且這些小批量的數(shù)據(jù)也可以幫助你完成這些。如果你可以花費(fèi)更多的時(shí)間來做更多的操作,那么就花費(fèi)一些多余的時(shí)間吧,同時(shí)不要讓你的系統(tǒng)停下來。
享受更快的SQL。
當(dāng)你寫代碼來優(yōu)化你的SQL性能的時(shí)候,在任何你可以遵守這些事項(xiàng)的時(shí)候,就去遵守它們。但是,請(qǐng)分別評(píng)價(jià)這些解決方法來看看哪種方法是最有效的,可以說沒有一個(gè)萬能的或者是固定的方法來解決這些問題。你將會(huì)發(fā)現(xiàn)很多竅門都是和ikyi提高并發(fā)性,并可以讓整體運(yùn)行通暢的。同時(shí),你也會(huì)注意到這些物理實(shí)現(xiàn)會(huì)從這個(gè)供應(yīng)商傳遞到下一個(gè)供應(yīng)商,這些概念和問題將會(huì)存在每一個(gè)SQL平臺(tái)上。